[studentbooks15] r83 committed - [No log message]

0 views
Skip to first unread message

student...@googlecode.com

unread,
Dec 4, 2010, 9:16:02 PM12/4/10
to student...@googlegroups.com
Revision: 83
Author: reamus
Date: Sat Dec 4 18:11:19 2010
Log: [No log message]
http://code.google.com/p/studentbooks15/source/detail?r=83

Added:
/svn/trunk/reamus/shoppingcart/jcart/MIT License.txt
/svn/trunk/reamus/shoppingcart/jcart/checkmark.png
/svn/trunk/reamus/shoppingcart/jcart/logo.jpg
/svn/trunk/reamus/shoppingcart/jcart/themes
/svn/trunk/reamus/shoppingcart/jcart/themes/default
/svn/trunk/reamus/shoppingcart/jcart/themes/default/checkout.php
/svn/trunk/reamus/shoppingcart/jcart/themes/default/demo-store.php
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/MIT
License.txt

/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/checkmark.png

/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/jcart-admin-tooltips.php

/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/jcart-admin.css

/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/jcart-admin.php

/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/jcart-config.php

/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/jcart-defaults.php

/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/jcart-gateway.php

/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/jcart-javascript.php

/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/jcart-relay.php
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/jcart.css
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/jcart.php
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/logo.jpg
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/themes

/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/themes/default

/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/themes/default/checkout.php

/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/themes/default/demo-store.php
/svn/trunk/reamus/shoppingcart/jcart_1.2
/svn/trunk/reamus/shoppingcart/jcart_1.2/checkout.php
/svn/trunk/reamus/shoppingcart/jcart_1.2/jcart
/svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/MIT License.txt
/svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/checkmark.png
/svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/jcart-config.php
/svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/jcart-defaults.php
/svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/jcart-gateway.php
/svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/jcart-javascript.min.php
/svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/jcart-javascript.php
/svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/jcart-relay.php
/svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/jcart.css
/svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/jcart.php
/svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/jquery-1.3.2.min.js
/svn/trunk/reamus/shoppingcart/jcart_1.2/store.php
/svn/trunk/reamus/shoppingcart/view_cart.php

=======================================
--- /dev/null
+++ /svn/trunk/reamus/shoppingcart/jcart/MIT License.txt Sat Dec 4
18:11:19 2010
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2009 Concept Logic
+
+Permission is hereby granted, free of charge, to any person obtaining a
copy
+of this software and associated documentation files (the "Software"), to
deal
+in the Software without restriction, including without limitation the
rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
=======================================
--- /dev/null
+++ /svn/trunk/reamus/shoppingcart/jcart/checkmark.png Sat Dec 4 18:11:19
2010
Binary file, no diff available.
=======================================
--- /dev/null
+++ /svn/trunk/reamus/shoppingcart/jcart/logo.jpg Sat Dec 4 18:11:19 2010
Binary file, no diff available.
=======================================
--- /dev/null
+++ /svn/trunk/reamus/shoppingcart/jcart/themes/default/checkout.php Sat
Dec 4 18:11:19 2010
@@ -0,0 +1,34 @@
+<?php
+/**
+ * @package WordPress
+ * @subpackage Default_Theme
+ */
+
+/*
+Template Name: jCart Checkout
+*/
+
+get_header(); ?>
+
+ <div id="content" class="narrowcolumn">
+
+ <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
+ <div class="post" id="post-<?php the_ID(); ?>">
+ <h2><?php the_title(); ?></h2>
+ <div class="entry">
+
+ <div id="jcart"><?php wp_jcart($location = 'content');?></div>
+
+ <?php the_content('<p class="serif">Read the rest of this page
&raquo;</p>'); ?>
+
+ <?php wp_link_pages(array('before'
=> '<p><strong>Pages:</strong> ', 'after' => '</p>', 'next_or_number'
=> 'number')); ?>
+
+ </div>
+ </div>
+ <?php endwhile; endif; ?>
+ <?php edit_post_link('Edit this entry.', '<p>', '</p>'); ?>
+ </div>
+
+<?php get_sidebar(); ?>
+
+<?php get_footer(); ?>
=======================================
--- /dev/null
+++ /svn/trunk/reamus/shoppingcart/jcart/themes/default/demo-store.php Sat
Dec 4 18:11:19 2010
@@ -0,0 +1,86 @@
+<?php
+/**
+ * @package WordPress
+ * @subpackage Default_Theme
+ */
+
+/*
+Template Name: jCart Demo Store
+*/
+
+get_header(); ?>
+
+ <div id="content" class="narrowcolumn">
+
+ <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
+ <div class="post" id="post-<?php the_ID(); ?>">
+ <h2><?php the_title(); ?></h2>
+ <div class="entry">
+
+ <?php the_content('<p class="serif">Read the rest of this page
&raquo;</p>'); ?>
+
+ <form method="post" action="" class="jcart">
+ <fieldset>
+ <input type="hidden" name="my-item-id" value="1" />
+ <input type="hidden" name="my-item-name" value="Soccer Ball" />
+ <input type="hidden" name="my-item-price" value="25.00" />
+
+ <ul>
+ <li><strong>Soccer Ball</strong></li>
+ <li>Price: $25.00</li>
+ <li>
+ <label>Qty: <input type="text" name="my-item-qty" value="1"
size="3" /></label>
+ </li>
+ </ul>
+
+ <input type="submit" name="my-add-button" value="add to cart"
class="button" />
+ </fieldset>
+ </form>
+
+ <form method="post" action="" class="jcart">
+ <fieldset>
+ <input type="hidden" name="my-item-id" value="2" />
+ <input type="hidden" name="my-item-name" value="Baseball Mitt" />
+ <input type="hidden" name="my-item-price" value="19.50" />
+
+ <ul>
+ <li><strong>Baseball Mitt</strong></li>
+ <li>Price: $19.50</li>
+ <li>
+ <label>Qty: <input type="text" name="my-item-qty" value="1"
size="3" /></label>
+ </li>
+ </ul>
+
+ <input type="submit" name="my-add-button" value="add to cart"
class="button" />
+ </fieldset>
+ </form>
+
+ <form method="post" action="" class="jcart">
+ <fieldset>
+ <input type="hidden" name="my-item-id" value="3" />
+ <input type="hidden" name="my-item-name" value="Hockey Stick" />
+ <input type="hidden" name="my-item-price" value="33.25" />
+
+ <ul>
+ <li><strong>Hockey Stick</strong></li>
+ <li>Price: $33.25</li>
+ <li>
+ <label>Qty: <input type="text" name="my-item-qty" value="1"
size="3" /></label>
+ </li>
+ </ul>
+
+ <input type="submit" name="my-add-button" value="add to cart"
class="button" />
+ </fieldset>
+ </form>
+
+ <?php wp_link_pages(array('before'
=> '<p><strong>Pages:</strong> ', 'after' => '</p>', 'next_or_number'
=> 'number')); ?>
+
+ </div>
+ </div>
+ <?php endwhile; endif; ?>
+ <?php edit_post_link('Edit this entry.', '<p>', '</p>'); ?>
+ </div>
+
+<?php get_sidebar(); ?>
+
+<?php get_footer(); ?>
=======================================
--- /dev/null
+++ /svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/MIT
License.txt Sat Dec 4 18:11:19 2010
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2009 Concept Logic
+
+Permission is hereby granted, free of charge, to any person obtaining a
copy
+of this software and associated documentation files (the "Software"), to
deal
+in the Software without restriction, including without limitation the
rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
=======================================
--- /dev/null
+++
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/checkmark.png
Sat Dec 4 18:11:19 2010
Binary file, no diff available.
=======================================
--- /dev/null
+++
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/jcart-admin-tooltips.php
Sat Dec 4 18:11:19 2010
@@ -0,0 +1,109 @@
+<?php
+
+$content = $_GET['content'];
+?>
+
+<div id="jcart-thickbox">
+
+<?php
+switch($content)
+ {
+ case 'paypal':
+?>
+
+ <h3>PayPal Setup</h3>
+
+ <p>Enter your secure merchant ID to enable PayPal integration.
You&rsquo;ll find this under <strong>My Account > Profile</strong> when
logged into PayPal.</p>
+
+ <p>Your PayPal profile must also use the following settings:</p>
+
+ <ul>
+ <li><strong>PayPal Account Optional</strong> is turned on</li>
+ <li><strong>Shipping Calculations</strong> have been set up</li>
+ <li><strong>Auto Return</strong> is turned off</li>
+ </ul>
+
+ <p><a
href="https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&amp;content_ID=developer/e_howto_html_ProfileAndTools">Visit
PayPal for more info on profile settings.</a></p>
+
+ <p>If you&rsquo;d like to use your own checkout script or payment
processor, you can edit the source of <code>jcart-gateway.php</code> to
meet your needs.</p>
+
+<?php
+ break;
+ case 'checkout':
+?>
+
+ <h3>Checkout Page</h3>
+
+ <p>Enter the URL of your checkout page.</p>
+
+ <p>This can be any WordPress page that uses the
<strong>checkout.php</strong> template included with jCart.</p>
+
+<?php
+ break;
+ case 'sample_form':
+?>
+
+ <h3 style="margin-bottom:30px;">Sample Add-to-Cart Form</h3>
+
+<pre>
+&lt;form method="post" action="" class="jcart"&gt;
+ &lt;fieldset&gt;
+ &lt;input type="hidden" name="my-item-id" value="1" /&gt;
+ &lt;input type="hidden" name="my-item-name" value="Soccer Ball" /&gt;
+ &lt;input type="hidden" name="my-item-price" value="25.00" /&gt;
+
+ &lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;Soccer Ball&lt;/strong&gt;&lt;/li&gt;
+ &lt;li&gt;Price: $25.00&lt;/li&gt;
+ &lt;li&gt;
+ &lt;label&gt;Qty: &lt;input type="text" name="my-item-qty"
value="1" size="3" /&gt;&lt;/label&gt;
+ &lt;/li&gt;
+ &lt;/ul&gt;
+
+ &lt;input type="submit" name="my-add-button" value="add to cart"
class="button" /&gt;
+ &lt;/fieldset&gt;
+&lt;/form&gt;
+</pre>
+
+
+<?php
+ break;
+ case 'image_button':
+?>
+
+ <h3>Using an Image Button</h3>
+
+ <p>If your item form uses an <code>&lt;input type="image" /&gt;</code>
for the add-to-cart button, you must append <strong>_x</strong> to the
value of the input&rsquo;s name attribute.</p>
+
+ <p>For example, if your button code looks like this:</p>
+
+ <p style="padding-left:25px;"><code>&lt;input type="image"
name="my-add-button" /&gt;</code></p>
+
+ <p>Enter <strong>my-add-button_x</strong> for the add-to-cart option.</p>
+
+ <p><a
href="http://php.net/manual/en/faq.html.php#faq.html.form-image">Visit the
PHP website for more info on image buttons.</a></p>
+<?php
+ break;
+ case 'encoding':
+?>
+
+ <h3>Using Special or Accented Characters</h3>
+
+ <p>There are two requirements to use special or accented characters in
your item name fields:</p>
+
+ <ol>
+ <li>Your WordPress installation must use UTF-8 character encoding. This
option can be found under <strong>Settings > Reading</strong> in your
WordPress admin.</li>
+ <li>You must use the apppropriate HTML character entity in place of the
literal character.</li>
+ </ol>
+
+ <p><a
href="http://www.evotech.net/blog/2007/08/first-5800-numeric-html-character-entities/">Visit
this page for a good list of HTML character entities.</a></p>
+
+<?php
+ break;
+ }
+
+?>
+
+
+</div>
+
=======================================
--- /dev/null
+++
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/jcart-admin.css
Sat Dec 4 18:11:19 2010
@@ -0,0 +1,11 @@
+#jcart-admin hr { display:none; }
+#jcart-admin h3 { padding:10px; background:#ededed; margin-top:0; }
+
+#jcart-admin div.hr { border-bottom:dashed 2px #66cc66; margin:30px auto 0
auto; }
+#jcart-admin div.hr hr { display:none; }
+
+#jcart-admin ul, #jcart-thickbox ul { margin:20px 0 20px 25px;
list-style-type:square; }
+#jcart-admin ol, #jcart-thickbox ol { margin:20px 0 20px 25px;
list-style-type:decimal; }
+
+#jcart-thickbox { padding:10px; }
+
=======================================
--- /dev/null
+++
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/jcart-admin.php
Sat Dec 4 18:11:19 2010
@@ -0,0 +1,610 @@
+<?php
+
+/*
+Plugin Name: jCart
+Plugin URI: http://conceptlogic.com/jcart/
+Description: <strong>BETA version!</strong> Ajax shopping cart with PayPal
checkout. Easy to customize with your text and CSS. Based on jCart version
1.2.
+Author: Doug Whitney
+Version: 0.9.1
+Author URI: http://conceptlogic.com
+*/
+
+
+// SET THE DEFAULT VALUES USED IN THE DEMO STORE TEMPLATE
+if (!get_option('jcart_item_id'))
{update_option('jcart_item_id', 'my-item-id');}
+if (!get_option('jcart_item_name'))
{update_option('jcart_item_name', 'my-item-name');}
+if (!get_option('jcart_item_price'))
{update_option('jcart_item_price', 'my-item-price');}
+if (!get_option('jcart_item_qty'))
{update_option('jcart_item_qty', 'my-item-qty');}
+if (!get_option('jcart_item_add'))
{update_option('jcart_item_add', 'my-add-button');}
+
+
+// PRE-2.6 COMPATIBILITY
+if (!defined('WP_CONTENT_URL'))
+ {
+ define('WP_CONTENT_URL', get_option('siteurl') . '/wp-content');
+ }
+
+if (!defined('WP_CONTENT_DIR'))
+ {
+ define('WP_CONTENT_DIR', ABSPATH . 'wp-content');
+ }
+
+if (!defined('WP_PLUGIN_URL'))
+ {
+ define('WP_PLUGIN_URL', WP_CONTENT_URL. '/plugins');
+ }
+
+if (!defined('WP_PLUGIN_DIR'))
+ {
+ define('WP_PLUGIN_DIR', WP_CONTENT_DIR . '/plugins');
+ }
+
+
+// ADD JCART MENU ITEM TO WP ADMIN MENU
+add_action('admin_menu', 'jcart_menu_item');
+
+// ADD JCART ADMIN CSS TO WP ADMIN HTML HEAD
+add_action('admin_head', 'admin_css');
+
+// ADD JCART JAVASCRIPTS TO WP GLOBAL SCRIPTS
+add_action('wp_print_scripts', 'jcart_scripts');
+
+// ADD JCART FRONT END CSS TO WP FRONT END HTML HEAD
+add_action('wp_head', 'jcart_css');
+
+
+// JCART ADMIN MENU ITEM
+function jcart_menu_item()
+ {
+ add_options_page('jCart Settings', 'jCart', 1, __FILE__, 'jcart_options');
+ }
+
+
+// JCART ADMIN CSS
+function admin_css()
+ {
+ $is_jcart_options_page = strpos($_SERVER['REQUEST_URI'], 'jcart');
+
+ if ($is_jcart_options_page !== false)
+ {
+ echo '<link rel="stylesheet" type="text/css" media="screen, projection"
href="' . WP_PLUGIN_URL . '/jcart/jcart-admin.css" />' . "\n";
+ echo '<link rel="stylesheet" type="text/css" media="screen, projection"
href="' . get_option('siteurl') . '/wp-includes/js/thickbox/thickbox.css"
/>' . "\n";
+ }
+ }
+
+
+// JCART JAVASCRIPTS
+function jcart_scripts()
+ {
+ // FRONT END
+ if (!is_admin())
+ {
+ // JCART NEEDS JQUERY 1.3.2 BUT WORDPRESS (2.7.1) CURRENTLY INCLUDES
JQUERY 1.2.6
+ // DE-REGISTER JQUERY IF ALREADY IN USE
+ wp_deregister_script('jquery');
+
+ // QUE UP JQUERY 1.3.2 VIA GOOGLE AJAX APIs
+
wp_enqueue_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js',
false, '1.3.2');
+
+ // QUE UP JCART 1.2
+ wp_enqueue_script('jcart',
WP_PLUGIN_URL . '/jcart/jcart-javascript.php', array('jquery'), '1.2');
+ }
+ // ADMIN
+ else if (is_admin())
+ {
+ $is_jcart_options_page = strpos($_SERVER['REQUEST_URI'], 'jcart');
+
+ if ($is_jcart_options_page !== false)
+ {
+ wp_enqueue_script('thickbox',
get_option('siteurl') . '/wp-includes/js/thickbox/thickbox.js',
array('jquery'), '');
+ }
+ }
+ }
+
+
+// JCART FRONT END CSS
+function jcart_css()
+ {
+ if (!is_admin())
+ {
+ echo '<link rel="stylesheet" type="text/css" media="screen,
projection" href="' . WP_PLUGIN_URL . '/jcart/jcart.css" />' . "\n";
+ }
+ }
+
+
+// PROCESS AND OUTPUT JCART
+// ASSUMING THE CHECKOUT PAGE USES A GLOBAL SIDEBAR, THIS FUNCTION WILL BE
CALLED TWICE ON THE CHECKOUT PAGE
+// THE LOCATION PARAMETER ALLOWS JCART TO DETERMINE WHERE IT IS BEING
INCLUDED, SO THE CART IS NOT DISPLAYED TWICE
+function wp_jcart($display_location)
+ {
+ // DETERMINE IF THIS IS THE CHECKOUT PAGE
+ $is_checkout = strpos($_SERVER['REQUEST_URI'],
get_option('jcart_form_action'));
+ if ($is_checkout !== false || $_REQUEST['jcart_is_checkout'] == 'true')
+ {
+ $is_checkout = true;
+ }
+ else
+ {
+ $is_checkout = false;
+ }
+
+ // IF THIS IS THE CHECKOUT, OR IF THIS IS THE SIDEBAR AND NOT THE CHECKOUT
+ if ($display_location == 'content' || ($display_location == 'sidebar' &&
$is_checkout !== true))
+ {
+ // RENDER JCART
+ include_once('jcart.php');
+
+ @session_start();
+
+ // INITIALIZE JCART AFTER SESSION START
+ $cart =& $_SESSION["jcart"]; if(!is_object($cart)) $cart = new jcart();
+
+ // DEFAULT CONFIG VALUES
+ include('jcart-defaults.php');
+
+ $cart->display_cart($jcart);
+ }
+ }
+
+
+// JCART ADMIN OPTIONS
+function jcart_options()
+ {
+
+ // IF OPTIONS HAVE BEEN UPDATED
+ if($_POST['jcart-options-post'] == 'Y')
+ {
+ // CHECK NONCE
+ check_admin_referer( 'jcart-update-admin-options');
+
+ // ADD-TO-CART FORM FIELD NAME ATTRIBUTES
+ $jcart['item_id'] = $_POST['jcart-item-id'];
+ $jcart['item_name'] = $_POST['jcart-item-name'];
+ $jcart['item_price'] = $_POST['jcart-item-price'];
+ $jcart['item_qty'] = $_POST['jcart-item-qty'];
+ $jcart['item_add'] = $_POST['jcart-item-add'];
+
+ // CHECKOUT PAGE
+ $jcart['form_action'] = $_POST['jcart-form-action'];
+
+ // PAYPAL SETUP
+ $jcart['paypal_id'] = $_POST['jcart-paypal-id'];
+ $jcart['paypal_currency'] = $_POST['jcart-paypal-currency'];
+
+ // DISPLAY TEXT
+ $jcart['cart_title'] = $_POST['jcart-cart-title'];
+ $jcart['single_item'] = $_POST['jcart-single-item'];
+ $jcart['multiple_items'] = $_POST['jcart-multiple-items'];
+ $jcart['subtotal'] = $_POST['jcart-subtotal'];
+
+ $jcart['update_button'] = $_POST['jcart-update-button'];
+ $jcart['checkout_button'] = $_POST['jcart-checkout-button'];
+ $jcart['checkout_paypal_button'] =
$_POST['jcart-checkout-paypal-button'];
+ $jcart['remove_link'] = $_POST['jcart-remove-link'];
+ $jcart['empty_button'] = $_POST['jcart-empty-button'];
+ $jcart['empty_message'] = $_POST['jcart-empty-message'];
+ $jcart['item_added_message'] = $_POST['jcart-item-added-message'];
+
+ $jcart['price_error'] = $_POST['jcart-price-error'];
+ $jcart['qty_error'] = $_POST['jcart-qty-error'];
+ $jcart['checkout_error'] = $_POST['jcart-checkout-error'];
+
+ // IMAGE BUTTONS
+ $jcart['update_image'] = $_POST['jcart-update-image'];
+ $jcart['empty_image'] = $_POST['jcart-empty-image'];
+ $jcart['checkout_image'] = $_POST['jcart-checkout-image'];
+ $jcart['checkout_paypal_image'] =
$_POST['jcart-checkout-paypal-image'];
+
+
+ // UPDATE OPTIONS
+ update_option('jcart_item_id', $jcart['item_id']);
+ update_option('jcart_item_name', $jcart['item_name']);
+ update_option('jcart_item_price', $jcart['item_price']);
+ update_option('jcart_item_qty', $jcart['item_qty']);
+ update_option('jcart_item_add', $jcart['item_add']);
+
+ update_option('jcart_form_action', $jcart['form_action']);
+
+ update_option('jcart_paypal_id', $jcart['paypal_id']);
+ update_option('jcart_paypal_currency', $jcart['paypal_currency']);
+
+ update_option('jcart_cart_title', $jcart['cart_title']);
+ update_option('jcart_single_item', $jcart['single_item']);
+ update_option('jcart_multiple_items', $jcart['multiple_items']);
+ update_option('jcart_subtotal', $jcart['subtotal']);
+
+ update_option('jcart_update_button', $jcart['update_button']);
+ update_option('jcart_checkout_button', $jcart['checkout_button']);
+ update_option('jcart_checkout_paypal_button',
$jcart['checkout_paypal_button']);
+ update_option('jcart_remove_link', $jcart['remove_link']);
+ update_option('jcart_empty_button', $jcart['empty_button']);
+ update_option('jcart_empty_message', $jcart['empty_message']);
+ update_option('jcart_item_added_message', $jcart['item_added_message']);
+
+ update_option('jcart_price_error', $jcart['price_error']);
+ update_option('jcart_qty_error', $jcart['qty_error']);
+ update_option('jcart_checkout_error', $jcart['checkout_error']);
+
+ update_option('jcart_update_image', $jcart['update_image']);
+ update_option('jcart_empty_image', $jcart['empty_image']);
+ update_option('jcart_checkout_image', $jcart['checkout_image']);
+ update_option('jcart_checkout_paypal_image',
$jcart['checkout_paypal_image']);
+
+?>
+ <div class="updated"><p><strong><?php _e('Options
saved.'); ?></strong></p></div>
+<?php
+ }
+ // NORMAL PAGE DISPLAY
+ else
+ {
+ // FORM INPUT NAME ATTRIBUTE VALUES
+ $jcart['item_id'] = get_option('jcart_item_id');
+ $jcart['item_name'] = get_option('jcart_item_name');
+ $jcart['item_price'] = get_option('jcart_item_price');
+ $jcart['item_qty'] = get_option('jcart_item_qty');
+ $jcart['item_add'] = get_option('jcart_item_add');
+
+
+ // CHECKOUT PAGE
+ $jcart['form_action'] = get_option('jcart_form_action');
+
+ // PAYPAL SETUP
+ $jcart['paypal_id'] = get_option('jcart_paypal_id');
+ $jcart['paypal_currency'] =
get_option('jcart_paypal_currency');
+
+ // DISPLAY TEXT
+ $jcart['cart_title'] = get_option('jcart_cart_title');
+ $jcart['single_item'] = get_option('jcart_single_item');
+ $jcart['multiple_items'] = get_option('jcart_multiple_items');
+ $jcart['subtotal'] = get_option('jcart_subtotal');
+
+ $jcart['update_button'] = get_option('jcart_update_button');
+ $jcart['checkout_button'] =
get_option('jcart_checkout_button');
+ $jcart['checkout_paypal_button'] =
get_option('jcart_checkout_paypal_button');
+ $jcart['remove_link'] = get_option('jcart_remove_link');
+ $jcart['empty_button'] = get_option('jcart_empty_button');
+ $jcart['empty_message'] = get_option('jcart_empty_message');
+ $jcart['item_added_message'] =
get_option('jcart_item_added_message');
+
+ $jcart['price_error'] = get_option('jcart_price_error');
+ $jcart['qty_error'] = get_option('jcart_qty_error');
+ $jcart['checkout_error'] = get_option('jcart_checkout_error');
+
+ $jcart['update_image'] = get_option('jcart_update_image');
+ $jcart['empty_image'] = get_option('jcart_empty_image');
+ $jcart['checkout_image'] = get_option('jcart_checkout_image');
+ $jcart['checkout_paypal_image'] =
get_option('jcart_checkout_paypal_image');
+ }
+?>
+
+<div class="wrap" id="jcart-admin">
+ <h2><a href="http://conceptlogic.com/jcart/" title="Visit the jCart
website"><img src="<?php echo WP_PLUGIN_URL;?>/jcart/logo.jpg" alt=""
style="vertical-align:middle;" /></a> &#8212;&nbsp;&nbsp;PayPal/Ajax
shopping cart for WordPress</h2>
+
+ <p>Thanks for testing the <strong>beta version</strong> of the jCart
plugin for Wordpress!</p>
+
+ <p>Please send feedback to: <a
href="mailto:jc...@conceptlogic.com">jc...@conceptlogic.com</a></p>
+
+ <div class="hr"><hr /></div>
+
+ <h3>Installation</h3>
+
+ <ol>
+ <li>Copy &amp; paste the following code into your sidebar: <code>&lt;div
id="jcart"&gt;&lt;?php wp_jcart($location
= 'sidebar');?&gt;&lt;/div&gt;</code></li>
+ <li>Copy the <strong>demo-store.php</strong> template into your theme
folder, then create a new page with this template or apply it to an
existing page.</li>
+ <li>Copy the <strong>checkout.php</strong> template into your theme
folder, then create a new page with this template or apply it to an
existing page.</li>
+ <li>Set the options below as necessary.</li>
+ </ol>
+
+ <div class="hr"><hr /></div>
+
+ <form method="post" action="<?php echo str_replace( '%7E', '~',
$_SERVER['REQUEST_URI']); ?>">
+ <input type="hidden" name="jcart-options-post" value="Y">
+
+ <?php
+ // CREATE NONCE
+ wp_nonce_field('jcart-update-admin-options');
+ ?>
+
+ <h3>PayPal Setup</h3>
+
+ <?php
+
+ switch($jcart['paypal_currency'])
+ {
+ case 'AUD':
+ $selected['AUD'] = ' selected="selected"';
+ break;
+ case 'CAD':
+ $selected['CAD'] = ' selected="selected"';
+ break;
+ case 'EUR':
+ $selected['EUR'] = ' selected="selected"';
+ break;
+ case 'GBP':
+ $selected['GBP'] = ' selected="selected"';
+ break;
+ case 'JPY':
+ $selected['JPY'] = ' selected="selected"';
+ break;
+ case 'USD':
+ $selected['USD'] = ' selected="selected"';
+ break;
+ case 'NZD':
+ $selected['NZD'] = ' selected="selected"';
+ break;
+ case 'CHF':
+ $selected['CHF'] = ' selected="selected"';
+ break;
+ case 'HKD':
+ $selected['HKD'] = ' selected="selected"';
+ break;
+ case 'SGD':
+ $selected['SGD'] = ' selected="selected"';
+ break;
+ case 'SEK':
+ $selected['SEK'] = ' selected="selected"';
+ break;
+ case 'DKK':
+ $selected['DKK'] = ' selected="selected"';
+ break;
+ case 'PLN':
+ $selected['PLN'] = ' selected="selected"';
+ break;
+ case 'NOK':
+ $selected['NOK'] = ' selected="selected"';
+ break;
+ case 'HUF':
+ $selected['HUF'] = ' selected="selected"';
+ break;
+ case 'CZK':
+ $selected['CZK'] = ' selected="selected"';
+ break;
+ case 'ILS':
+ $selected['ILS'] = ' selected="selected"';
+ break;
+ case 'MXN':
+ $selected['MXN'] = ' selected="selected"';
+ break;
+ }
+ ?>
+
+ <table class="form-table">
+ <tr valign="top">
+ <th scope="row"><label for="jcart-paypal-id">Secure merchant
ID:</label></th>
+ <td><input type="text" id="jcart-paypal-id" name="jcart-paypal-id"
size="" maxlength="" value="<?php echo $jcart['paypal_id'];?>"
class="regular-text" /> &nbsp;(<a href="<?php echo
WP_PLUGIN_URL;?>/jcart/jcart-admin-tooltips.php?content=paypal&amp;width=450"
class="thickbox">more info</a>)</td>
+ </tr>
+ <tr valign="top" style="background:#edfbef;">
+ <th scope="row"><label
for="jcart-paypal-currency">Currency:</label></th>
+ <td>
+ <select id="jcart-paypal-currency" name="jcart-paypal-currency">
+ <option value="">Select...</option>
+ <option value="AUD"<?php echo $selected['AUD'];?>>AUD - Australian
Dollars</option>
+ <option value="CAD"<?php echo $selected['CAD'];?>>CAD - Canadian
Dollars</option>
+ <option value="EUR"<?php echo $selected['EUR'];?>>EUR -
Euros</option>
+ <option value="GBP"<?php echo $selected['GBP'];?>>GBP - Pounds
Sterling</option>
+ <option value="JPY"<?php echo $selected['JPY'];?>>JPY - Yen</option>
+ <option value="USD"<?php echo $selected['USD'];?>>USD - US
Dollars</option>
+ <option value="NZD"<?php echo $selected['NZD'];?>>NZD - New Zealand
Dollar</option>
+ <option value="CHF"<?php echo $selected['CHF'];?>>CHF - Swiss
Franc</option>
+ <option value="HKD"<?php echo $selected['HKD'];?>>HKD - Hong Kong
Dollar</option>
+ <option value="SGD"<?php echo $selected['SGD'];?>>SGD - Singapore
Dollar</option>
+ <option value="SEK"<?php echo $selected['SEK'];?>>SEK - Swedish
Krona</option>
+ <option value="DKK"<?php echo $selected['DKK'];?>>DKK - Danish
Krone</option>
+ <option value="PLN"<?php echo $selected['PLN'];?>>PLN - Polish
Zloty</option>
+ <option value="NOK"<?php echo $selected['NOK'];?>>NOK - Norwegian
Krone</option>
+ <option value="HUF"<?php echo $selected['HUF'];?>>HUF - Hungarian
Forint</option>
+ <option value="CZK"<?php echo $selected['CZK'];?>>CZK - Czech
Koruna</option>
+ <option value="ILS"<?php echo $selected['ILS'];?>>ILS - Israel
Shekel</option>
+ <option value="MXN"<?php echo $selected['MXN'];?>>MXN - Mexican
Peso</option>
+ </select>
+ </td>
+ </tr>
+ </table>
+
+ <div class="hr"><hr /></div>
+
+ <h3>Checkout Page</h3>
+
+ <table class="form-table">
+ <tr valign="top">
+ <th scope="row"><label for="jcart-form-action">Checkout page
URL:</label></th>
+
+ <?php $protocol = 'http://'; if (!empty($_SERVER['HTTPS'])) {
$protocol = 'https://'; }?>
+
+ <td><?php echo $protocol . $_SERVER['HTTP_HOST'];?>/<input type="text"
id="jcart-form-action" name="jcart-form-action" size="" maxlength=""
value="<?php echo $jcart['form_action'];?>" class="regular-text" />
&nbsp;(<a href="<?php echo
WP_PLUGIN_URL;?>/jcart/jcart-admin-tooltips.php?content=checkout&amp;width=450"
class="thickbox">more info</a>)</td>
+ </tr>
+ </table>
+
+ <div class="hr"><hr /></div>
+
+ <h3>Field Names</h3>
+
+ <ul>
+ <li>To accept items from your store, jCart needs to know the field
names used in your add-to-cart forms.</li>
+ <li>Unless using the sample form included in the
<strong>demo-store.php</strong> template, override the default values with
your input name attributes.</li>
+ <li>Your add-to-cart forms must also use the CSS class
<code>jcart</code>.</li>
+ <li><a href="<?php echo
WP_PLUGIN_URL;?>/jcart/jcart-admin-tooltips.php?content=sample_form&amp;width=675"
class="thickbox">View an example form.</a></li>
+ </ul>
+
+ <table class="form-table">
+ <tr valign="top" style="background:#edfbef;">
+ <th scope="row"><label for="jcart-item-id">Item ID:</label></th>
+ <td><input type="text" id="jcart-item-id" name="jcart-item-id" size=""
maxlength="" value="<?php echo $jcart['item_id'];?>" class="regular-text"
/></td>
+ </tr>
+ <tr valign="top">
+ <th scope="row"><label for="jcart-item-name">Item name:</label></th>
+ <td><input type="text" id="jcart-item-name" name="jcart-item-name"
size="" maxlength="" value="<?php echo $jcart['item_name'];?>"
class="regular-text" /> &nbsp;(<a href=
+ "<?php echo
WP_PLUGIN_URL;?>/jcart/jcart-admin-tooltips.php?content=encoding&amp;width=450"
class="thickbox">using special or accented characters?</a>)</td>
+ </tr>
+ <tr valign="top" style="background:#edfbef;">
+ <th scope="row"><label for="jcart-item-price">Item price:</label></th>
+ <td><input type="text" id="jcart-item-price" name="jcart-item-price"
size="" maxlength="" value="<?php echo $jcart['item_price'];?>"
class="regular-text" /></td>
+ </tr>
+ <tr valign="top">
+ <th scope="row"><label for="jcart-item-qty">Item quantity:</label></th>
+ <td><input type="text" id="jcart-item-qty" name="jcart-item-qty"
size="" maxlength="" value="<?php echo $jcart['item_qty'];?>"
class="regular-text" /></td>
+ </tr>
+ <tr valign="top" style="background:#edfbef;">
+ <th scope="row"><label for="jcart-item-add">Add-to-cart:</label></th>
+ <td><input type="text" id="jcart-item-add" name="jcart-item-add"
size="" maxlength="" value="<?php echo $jcart['item_add'];?>"
class="regular-text" /> &nbsp;(<a href=
+ "<?php echo
WP_PLUGIN_URL;?>/jcart/jcart-admin-tooltips.php?content=image_button&amp;width=450"
class="thickbox">using an image button?</a>)</td>
+ </tr>
+ </table>
+
+ <div class="hr"><hr /></div>
+
+ <h3>Cart Text</h3>
+
+ <ul>
+ <li>Override the default cart text with your values, or leave these
empty to use the defaults shown.</li>
+ </ul>
+
+ <table class="form-table">
+ <tr valign="top" style="background:#edfbef;">
+ <th scope="row"><label for="jcart-cart-title">Cart title:</label></th>
+ <td>
+ <input type="text" id="jcart-cart-title" name="jcart-cart-title"
size="" maxlength="" value="<?php echo $jcart['cart_title'];?>"
class="regular-text" />
+ <span class="setting-description">Shopping Cart</span>
+ </td>
+ </tr>
+ <tr valign="top">
+ <th scope="row"><label for="jcart-single-item">Single
item:</label></th>
+ <td>
+ <input type="text" id="jcart-single-item" name="jcart-single-item"
size="" maxlength="" value="<?php echo $jcart['single_item'];?>"
class="regular-text" />
+ <span class="setting-description">Item</span>
+ </td>
+ </tr>
+ <tr valign="top" style="background:#edfbef;">
+ <th scope="row"><label for="jcart-multiple-items">Multiple
items:</label></th>
+ <td>
+ <input type="text" id="jcart-multiple-items"
name="jcart-multiple-items" size="" maxlength="" value="<?php echo
$jcart['multiple_items'];?>" class="regular-text" />
+ <span class="setting-description">Items</span>
+ </td>
+ </tr>
+ <tr valign="top">
+ <th scope="row"><label for="jcart-subtotal">Subtotal:</label></th>
+ <td>
+ <input type="text" id="jcart-subtotal" name="jcart-subtotal" size=""
maxlength="" value="<?php echo $jcart['subtotal'];?>" class="regular-text"
/>
+ <span class="setting-description">Subtotal</span>
+ </td>
+ </tr>
+ <tr valign="top" style="background:#edfbef;">
+ <th scope="row"><label for="jcart-remove-link">Remove
link:</label></th>
+ <td>
+ <input type="text" id="jcart-remove-link" name="jcart-remove-link"
size="" maxlength="" value="<?php echo $jcart['remove_link'];?>"
class="regular-text" />
+ <span class="setting-description">remove</span>
+ </td>
+ </tr>
+ <tr valign="top">
+ <th scope="row"><label for="jcart-checkout-button">Checkout
button:</label></th>
+ <td>
+ <input type="text" id="jcart-checkout-button"
name="jcart-checkout-button" size="" maxlength="" value="<?php echo
$jcart['checkout_button'];?>" class="regular-text" />
+ <span class="setting-description">checkout</span>
+ </td>
+ </tr>
+ <tr valign="top" style="background:#edfbef;">
+ <th scope="row"><label for="jcart-checkout-paypal-button">PayPal
button:</label></th>
+ <td>
+ <input type="text" id="jcart-checkout-paypal-button"
name="jcart-checkout-paypal-button" size="" maxlength="" value="<?php echo
$jcart['checkout_paypal_button'];?>" class="regular-text" />
+ <span class="setting-description">Checkout with PayPal</span>
+ </td>
+ </tr>
+ <tr valign="top">
+ <th scope="row"><label for="jcart-update-button">Update
button:</label></th>
+ <td>
+ <input type="text" id="jcart-update-button"
name="jcart-update-button" size="" maxlength="" value="<?php echo
$jcart['update_button'];?>" class="regular-text" />
+ <span class="setting-description">update</span>
+ </td>
+ </tr>
+ <tr valign="top" style="background:#edfbef;">
+ <th scope="row"><label for="jcart-empty-button">Empty
button:</label></th>
+ <td>
+ <input type="text" id="jcart-empty-button" name="jcart-empty-button"
size="" maxlength="" value="<?php echo $jcart['empty_button'];?>"
class="regular-text" />
+ <span class="setting-description">empty</span>
+ </td>
+ </tr>
+ <tr valign="top">
+ <th scope="row"><label for="jcart-empty-message">Empty cart
message:</label></th>
+ <td>
+ <input type="text" id="jcart-empty-message"
name="jcart-empty-message" size="" maxlength="" value="<?php echo
$jcart['empty_message'];?>" class="regular-text" />
+ <span class="setting-description">Your cart is empty!</span>
+ </td>
+ </tr>
+ <tr valign="top" style="background:#edfbef;">
+ <th scope="row"><label for="jcart-item-added-message">Item added
message:</label></th>
+ <td>
+ <input type="text" id="jcart-item-added-message"
name="jcart-item-added-message" size="" maxlength="" value="<?php echo
$jcart['item_added_message'];?>" class="regular-text" />
+ <span class="setting-description">Item added!</span>
+ </td>
+ </tr>
+ <tr valign="top">
+ <th scope="row"><label for="jcart-price-error">Price error
message:</label></th>
+ <td>
+ <input type="text" id="jcart-price-error" name="jcart-price-error"
size="" maxlength="" value="<?php echo $jcart['price_error'];?>"
class="regular-text" />
+ <span class="setting-description">Invalid price format!</span>
+ </td>
+ </tr>
+ <tr valign="top" style="background:#edfbef;">
+ <th scope="row"><label for="jcart-qty-error">Quantity error
message:</label></th>
+ <td>
+ <input type="text" id="jcart-qty-error" name="jcart-qty-error"
size="" maxlength="" value="<?php echo $jcart['qty_error'];?>"
class="regular-text" />
+ <span class="setting-description">Item quantities must be whole
numbers!</span>
+ </td>
+ </tr>
+ <tr valign="top">
+ <th scope="row"><label for="jcart-checkout-error">Checkout error
message:</label></th>
+ <td>
+ <input type="text" id="jcart-checkout-error"
name="jcart-checkout-error" size="" maxlength="" value="<?php echo
$jcart['checkout_error'];?>" class="regular-text" />
+ <span class="setting-description">Your order could not be
processed!</span>
+ </td>
+ </tr>
+ </table>
+
+ <div class="hr"><hr /></div>
+
+ <h3>Cart Buttons</h3>
+
+ <ul>
+ <li>You can override the default cart buttons with your images by
setting the path and filename for each image.</li>
+ <li>Note that the update and empty buttons are hidden when javascript
is enabled.</li>
+ </ul>
+
+ <table class="form-table">
+ <tr valign="top" style="background:#edfbef;">
+ <th scope="row"><label for="jcart-update-image">Update:</label></th>
+ <td>
+ <input type="text" id="jcart-update-image" name="jcart-update-image"
size="" maxlength="" value="<?php echo $jcart['update_image'];?>"
class="regular-text" style="width:450px;" />
+ </td>
+ </tr>
+ <tr valign="top">
+ <th scope="row"><label for="jcart-empty-image">Empty:</label></th>
+ <td>
+ <input type="text" id="jcart-empty-image" name="jcart-empty-image"
size="" maxlength="" value="<?php echo $jcart['empty_image'];?>"
class="regular-text" style="width:450px;" />
+ </td>
+ </tr>
+ <tr valign="top" style="background:#edfbef;">
+ <th scope="row"><label
for="jcart-checkout-image">Checkout:</label></th>
+ <td>
+ <input type="text" id="jcart-checkout-image"
name="jcart-checkout-image" size="" maxlength="" value="<?php echo
$jcart['checkout_image'];?>" class="regular-text" style="width:450px;" />
+ </td>
+ </tr>
+ <tr valign="top">
+ <th scope="row"><label for="jcart-checkout-paypal-image">PayPal
checkout:</label></th>
+ <td>
+ <input type="text" id="jcart-checkout-paypal-image"
name="jcart-checkout-paypal-image" size="" maxlength="" value="<?php echo
$jcart['checkout_paypal_image'];?>" class="regular-text"
style="width:450px;" />
+ </td>
+ </tr>
+ </table>
+
+ <div class="hr"><hr /></div>
+
+ <p class="submit">
+ <input type="submit" name="jcart-options-update" value="<?php _e('Save
jCart Options', '') ?>" class="button-primary" />
+ </p>
+ </form>
+
+</div>
+
+<?php
+ } // END JCART ADMIN OPTIONS
+?>
=======================================
--- /dev/null
+++
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/jcart-config.php
Sat Dec 4 18:11:19 2010
@@ -0,0 +1,12 @@
+<?php
+
+// JCART v1.2
+// http://conceptlogic.com/jcart/
+
+// IN ORDER TO USE WORDPRESS FUNCTIONS, JCART LOOKS FOR wp-blog-header.php
IN YOUR ROOT DIRECTORY
+// IF NOT INSTALLED IN YOUR ROOT DIRECTORY, SET THE ABSOLUTE PATH HERE
+// FOR EXAMPLE: $wp_blog_header
= '/home/domain/public_html/blog/wp-blog-header.php';
+
+$wp_blog_header = '';
+
+?>
=======================================
--- /dev/null
+++
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/jcart-defaults.php
Sat Dec 4 18:11:19 2010
@@ -0,0 +1,103 @@
+<?php
+
+// JCART v1.2
+// http://conceptlogic.com/jcart/
+
+
+// IF THE USER HASN'T SET A VALUE
+if (empty($wp_blog_header))
+ {
+ // ASSUME WORDPRESS IS INSTALLED IN ROOT
+ $wp_blog_header = $_SERVER['DOCUMENT_ROOT'] . '/wp-blog-header.php';
+ }
+include_once($wp_blog_header);
+
+
+// PRE-2.6 COMPATIBILITY
+if (!defined('WP_CONTENT_URL'))
+ {
+ define('WP_CONTENT_URL', get_option( 'siteurl' ) . '/wp-content' );
+ }
+
+if (!defined('WP_CONTENT_DIR'))
+ {
+ define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content');
+ }
+
+if (!defined('WP_PLUGIN_URL'))
+ {
+ define('WP_PLUGIN_URL', WP_CONTENT_URL. '/plugins' );
+ }
+
+if (!defined('WP_PLUGIN_DIR'))
+ {
+ define( 'WP_PLUGIN_DIR', WP_CONTENT_DIR . '/plugins' );
+ }
+
+
+// FORM FIELDS
+$jcart['item_id'] = get_option('jcart_item_id');
+$jcart['item_name'] = get_option('jcart_item_name');
+$jcart['item_price'] = get_option('jcart_item_price');
+$jcart['item_qty'] = get_option('jcart_item_qty');
+$jcart['item_add'] = get_option('jcart_item_add');
+
+// wp-mod: NOT USED SINCE WE HAVE WP CONSTANTS
+// PATH TO THE DIRECTORY CONTAINING JCART FILES
+// $jcart['path'] = get_option('siteurl') . '/wp-content/plugins/jcart/';
+
+// CHECKOUT PAGE
+$jcart['form_action'] = get_option('jcart_form_action');
+
+// PAYPAL SETUP
+$jcart['paypal_id'] = get_option('jcart_paypal_id');
+$jcart['paypal_currency'] = get_option('jcart_paypal_currency');
+
+// DISPLAY TEXT
+$jcart['text']['cart_title'] = get_option('jcart_cart_title');
+$jcart['text']['single_item'] = get_option('jcart_single_item');
+$jcart['text']['multiple_items'] = get_option('jcart_multiple_items');
+$jcart['text']['subtotal'] = get_option('jcart_subtotal');
+
+$jcart['text']['update_button'] = get_option('jcart_update_button');
+$jcart['text']['checkout_button'] = get_option('jcart_checkout_button');
+$jcart['text']['checkout_paypal_button'] =
get_option('jcart_checkout_paypal_button');
+$jcart['text']['remove_link'] = get_option('jcart_remove_link');
+$jcart['text']['empty_button'] = get_option('jcart_empty_button');
+$jcart['text']['empty_message'] = get_option('jcart_empty_message');
+$jcart['text']['item_added_message'] =
get_option('jcart_item_added_message');
+
+$jcart['text']['price_error'] = get_option('jcart_price_error');
+$jcart['text']['qty_error'] = get_option('jcart_qty_error');
+$jcart['text']['checkout_error'] = get_option('jcart_checkout_error');
+
+$jcart['button']['update'] = get_option('jcart_update_image');
+$jcart['button']['empty'] = get_option('jcart_empty_image');
+$jcart['button']['checkout'] = get_option('jcart_checkout_image');
+$jcart['button']['checkout_paypal'] =
get_option('jcart_checkout_paypal_image');
+
+// DEFAULT CART TEXT USED IF NOT OVERRIDDEN IN jcart-config.php
+// DEFAULTS MUST BE AVAILABLE TO jcart.php, AND jcart-javascript.php AND
jcart-javascript.min.php
+// INCLUDED AS A SEPARATE FILE TO SIMPLIFY USER CONFIG
+
+// wp-mod: ASSUME WORDPRESS IS INSTALLED IN ROOT, USER CAN OVERRIDE IN WP
ADMIN IF NOT
+// if (!$jcart['path']) die('The path to jCart isn\'t set. Please see
<strong>jcart-config.php</strong> for more info.');
+
+if (!$jcart['text']['cart_title']) $jcart['text']['cart_title']
= 'Shopping Cart';
+if (!$jcart['text']['single_item']) $jcart['text']['single_item']
= 'Item';
+if (!$jcart['text']['multiple_items']) $jcart['text']['multiple_items']
= 'Items';
+if (!$jcart['text']['subtotal']) $jcart['text']['subtotal']
= 'Subtotal';
+
+if (!$jcart['text']['update_button']) $jcart['text']['update_button']
= 'update';
+if (!$jcart['text']['checkout_button']) $jcart['text']['checkout_button']
= 'checkout';
+if (!$jcart['text']['checkout_paypal_button'])
$jcart['text']['checkout_paypal_button'] = 'Checkout with PayPal';
+if (!$jcart['text']['remove_link']) $jcart['text']['remove_link']
= 'remove';
+if (!$jcart['text']['empty_button']) $jcart['text']['empty_button']
= 'empty';
+if (!$jcart['text']['empty_message']) $jcart['text']['empty_message']
= 'Your cart is empty!';
+if (!$jcart['text']['item_added_message'])
$jcart['text']['item_added_message'] = 'Item added!';
+
+if (!$jcart['text']['price_error']) $jcart['text']['price_error']
= 'Invalid price format!';
+if (!$jcart['text']['quantity_error']) $jcart['text']['quantity_error']
= 'Item quantities must be whole numbers!';
+if (!$jcart['text']['checkout_error']) $jcart['text']['checkout_error']
= 'Your order could not be processed!';
+
+?>
=======================================
--- /dev/null
+++
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/jcart-gateway.php
Sat Dec 4 18:11:19 2010
@@ -0,0 +1,145 @@
+<?php
+
+// JCART v1.2
+// http://conceptlogic.com/jcart/
+
+// THIS FILE IS CALLED WHEN ANY BUTTON ON THE CHECKOUT PAGE (PAYPAL
CHECKOUT, UPDATE, OR EMPTY) IS CLICKED
+// WE CAN ONLY DEFINE ONE FORM ACTION, SO THIS FILE ALLOWS US TO FORK THE
FORM SUBMISSION DEPENDING ON WHICH BUTTON WAS CLICKED
+// ALSO ALLOWS US TO VERIFY PRICES BEFORE SUBMITTING TO PAYPAL
+
+// INCLUDE JCART BEFORE SESSION START
+include_once 'jcart.php';
+
+// START SESSION
+session_start();
+
+// INITIALIZE JCART AFTER SESSION START
+$cart =& $_SESSION['jcart']; if (!is_object($cart)) $cart = new jcart();
+
+// WHEN JAVASCRIPT IS DISABLED THE UPDATE AND EMPTY BUTTONS ARE DISPLAYED
+// RE-DISPLAY THE CART IF THE VISITOR CLICKS EITHER BUTTON
+if ($_POST['jcart_update_cart'] || $_POST['jcart_empty'])
+ {
+
+ // UPDATE THE CART
+ if ($_POST['jcart_update_cart'])
+ {
+ $cart_updated = $cart->update_cart();
+ if ($cart_updated !== true)
+ {
+ $_SESSION['quantity_error'] = true;
+ }
+ }
+
+ // EMPTY THE CART
+ if ($_POST['jcart_empty'])
+ {
+ $cart->empty_cart();
+ }
+
+ // REDIRECT BACK TO THE CHECKOUT PAGE
+ header('Location: ' . $_POST['jcart_checkout_page']);
+ exit;
+ }
+
+// THE VISITOR HAS CLICKED THE PAYPAL CHECKOUT BUTTON
+else
+ {
+
+ ///////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////
+ /*
+
+ A malicious visitor may try to change item prices before checking out,
+ either via javascript or by posting from an external script.
+
+ Here you can add PHP code that validates the submitted prices against
+ your database or validates against hard-coded prices.
+
+ The cart data has already been sanitized and is available thru the
+ $cart->get_contents() function. For example:
+
+ foreach ($cart->get_contents() as $item)
+ {
+ $item_id = $item['id'];
+ $item_name = $item['name'];
+ $item_price = $item['price'];
+ $item_qty = $item['qty'];
+ }
+
+ */
+ ///////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////
+
+ $valid_prices = true;
+
+ ///////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////
+
+ // IF THE SUBMITTED PRICES ARE NOT VALID
+ if ($valid_prices !== true)
+ {
+ // KILL THE SCRIPT
+ die($jcart['text']['checkout_error']);
+ }
+
+ // PRICE VALIDATION IS COMPLETE
+ // SEND CART CONTENTS TO PAYPAL USING THEIR UPLOAD METHOD, FOR DETAILS
SEE http://tinyurl.com/djoyoa
+ else if ($valid_prices === true)
+ {
+ // PAYPAL COUNT STARTS AT ONE INSTEAD OF ZERO
+ $paypal_count = 1;
+ $items_query_string;
+ foreach ($cart->get_contents() as $item)
+ {
+ // BUILD THE QUERY STRING
+ $items_query_string .= '&item_name_' . $paypal_count . '=' .
$item['name'];
+ $items_query_string .= '&amount_' . $paypal_count . '=' .
$item['price'];
+ $items_query_string .= '&quantity_' . $paypal_count . '=' .
$item['qty'];
+
+ // INCREMENT THE COUNTER
+ ++$paypal_count;
+ }
+
+ // EMPTY THE CART
+ $cart->empty_cart();
+
+ if ($jcart['paypal_id'])
+ {
+ // REDIRECT TO PAYPAL WITH MERCHANT ID AND CART CONTENTS
+ header( 'Location:
https://www.paypal.com/cgi-bin/webscr?cmd=_cart&upload=1&charset=utf-8&currency_code=' .
$jcart['paypal_currency'] . '&business=' . $jcart['paypal_id'] .
$items_query_string);
+ exit;
+ }
+ else
+ // THE USER HAS NOT CONFIGURED A PAYPAL ID
+ // DISPLAY THE PAYPAL URL WITH AN ERROR MESSAGE
+ {
+ ?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html>
+ <head>
+ <title></title>
+ </head>
+ <body>
+ <div style="width:950px; margin:40px auto; padding:20px; border:solid
2px #333; background:#ededed;">
+ <p><strong>PayPal integration requires a secure merchant
ID!</strong></p>
+
+ <p>Below is the URL that would be sent to PayPal if a merchant ID was
set in your <a href="<?php echo
get_option('siteurl');?>/wp-admin/options-general.php?page=jcart/jcart-admin.php">jCart
options</a>:</p>
+
+
<p>https://www.paypal.com/cgi-bin/webscr?cmd=_cart&upload=1&charset=utf-8&currency_code=<?php
echo $jcart['paypal_currency'];?>&business=PAYPAL_ID<?php echo
$items_query_string;?></p>
+ </div>
+ </body>
+</html>
+
+
+
+ <?php
+ exit;
+ }
+ }
+ }
+
+?>
=======================================
--- /dev/null
+++
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/jcart-javascript.php
Sat Dec 4 18:11:19 2010
@@ -0,0 +1,265 @@
+<?php
+
+// JCART v1.2
+// http://conceptlogic.com/jcart/
+
+// INCLUDE CONFIG SO THIS SCRIPT HAS ACCESS TO USER FIELD NAMES
+require_once('jcart-config.php');
+
+// INCLUDE DEFAULT VALUES SINCE WE NEED TO PASS THE VALUE OF THE UPDATE
BUTTON BACK TO jcart.php IF UPDATING AN ITEM QTY
+// IF NO VALUE IS SET IN CONFIG, THERE MUST BE A DEFAULT VALUE SINCE
SIMPLY CHECKING FOR THE VAR ITSELF FAILS
+require_once('jcart-defaults.php');
+
+// OUTPUT PHP FILE AS JAVASCRIPT
+header('content-type:application/x-javascript');
+
+// PREVENT CACHING
+header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
+header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
+
+// CONTINUE THE SESSION
+session_start();
+
+// TRIM '_x' FROM VALUE OF THE ADD TO CART BUTTON
+// IF USING AN IMAGE BUTTON, USER ADDS THIS STRING IN CONFIG SO PHP CAN
PROCESS CORRECTLY
+// HERE WE WANT THE LITERAL VALUE OF THE NAME ATTRIBUTE TO PASS TO
JAVASCRIPT
+$item_add = rtrim($jcart['item_add'], '_x') ;
+
+?>
+
+// WHEN THE DOCUMENT IS READY
+(function($){
+ $(document).ready(function() {
+
+ /**********************************************************************
+ Tooltips based on Wayfarer Tooltip 1.0.2
+ (c) 2006-2009 Abel Mohler
+ http://www.wayfarerweb.com/wtooltip.php
+ **********************************************************************/
+ $.fn.jcartTooltip = function(o, callback){
+ o = $.extend({
+ content: null,
+ follow: true,
+ auto: true,
+ fadeIn: 0,
+ fadeOut: 0,
+ appendTip: document.body,
+ offsetY: 25,
+ offsetX: -10,
+ style: {},
+ id: 'jcart-tooltip'
+ }, o || {});
+
+ o.style = $.extend({}, o.style || {});
+
+ o.style.display = "none";
+ o.style.position = "absolute";
+
+ var over = {};
+ var maxed = false;
+ var tooltip = document.createElement('div');
+
+ tooltip.id = o.id;
+
+ for (var p in o.style){ tooltip.style[p] = o.style[p];}
+
+ function fillTooltip(condition){if(
condition){$(tooltip).html(o.content);}}
+
+ fillTooltip(o.content && !o.ajax);
+ $(tooltip).appendTo(o.appendTip);
+
+ return this.each(function(){
+ this.onclick = function(ev){
+ function _execute(){
+ var display;
+ if (o.content)
+ {
+ display = "block";
+ }
+ else
+ {
+ display = "none";
+ }
+ if (display == "block" && o.fadeIn)
+ {
+ $(tooltip).fadeIn(o.fadeIn);
+
+ setTimeout(function(){
+ $(tooltip).fadeOut(o.fadeOut);
+ }, 1000);
+ }
+ }
+ _execute();
+ };
+
+ this.onmousemove = function(ev){
+ var e = (ev) ? ev : window.event;
+ over = this;
+ if (o.follow){
+ var scrollY = $(window).scrollTop();
+ var scrollX = $(window).scrollLeft();
+ var top = e.clientY + scrollY + o.offsetY;
+ var left = e.clientX + scrollX + o.offsetX;
+ var maxLeft = $(window).width() + scrollX - $(tooltip).outerWidth();
+ var maxTop = $(window).height() + scrollY - $(tooltip).outerHeight();
+ maxed = (top > maxTop || left > maxLeft) ? true : false;
+
+ if (left - scrollX <= 0 && o.offsetX < 0)
+ {
+ left = scrollX;
+ }
+ else if (left > maxLeft)
+ {
+ left = maxLeft;
+ }
+ if (top - scrollY <= 0 && o.offsetY < 0)
+ {
+ top = scrollY;
+ }
+ else if (top > maxTop)
+ {
+ top = maxTop;
+ }
+
+ tooltip.style.top = top + "px";
+ tooltip.style.left = left + "px";
+ }
+ };
+
+ this.onmouseout = function(){
+ $(tooltip).css('display', 'none');
+ };
+ });
+ };
+
+ // SHOW A TOOLTIP AFTER VISITOR CLICKS THE ADD-TO-CART BUTTON
+ // IN CASE THE CART IS OFF SCREEN
+ $('.jcart input[name="<?php echo
$item_add;?>"]').jcartTooltip({content: '<?php echo
$jcart['text']['item_added_message'];?>', fadeIn: 500, fadeOut: 350 });
+
+ // HIDE THE UPDATE AND EMPTY BUTTONS SINCE THESE ARE ONLY USED WHEN
JAVASCRIPT IS DISABLED
+ $('.jcart-hide').remove();
+
+ // DETERMINE IF THIS IS THE CHECKOUT PAGE BY CHECKING FOR HIDDEN INPUT
VALUE
+ // SENT VIA AJAX REQUEST TO jcart.php WHICH DECIDES WHETHER TO DISPLAY
THE CART CHECKOUT BUTTON OR THE PAYPAL CHECKOUT BUTTON BASED ON ITS VALUE
+ // WE NORMALLY CHECK AGAINST REQUEST URI BUT AJAX UPDATE SETS VALUE TO
jcart-relay.php
+ var isCheckout = $('#jcart-is-checkout').val();
+
+ // IF THIS IS NOT THE CHECKOUT THE HIDDEN INPUT DOESN'T EXIST AND NO
VALUE IS SET
+ if (isCheckout !== 'true') { isCheckout = 'false'; }
+
+
+ // WHEN AN ADD-TO-CART FORM IS SUBMITTED
+ $('form.jcart').submit(function(){
+
+ // GET INPUT VALUES FOR USE IN AJAX POST
+ var itemId = $(this).find('input[name=<?php echo
$jcart['item_id']?>]').val();
+ var itemPrice = $(this).find('input[name=<?php echo
$jcart['item_price']?>]').val();
+ var itemName = $(this).find('input[name=<?php echo
$jcart['item_name']?>]').val();
+ var itemQty = $(this).find('input[name=<?php echo
$jcart['item_qty']?>]').val();
+ var itemAdd = $(this).find('input[name=<?php echo
$jcart['item_add']?>]').val();
+
+ // SEND ITEM INFO VIA POST TO INTERMEDIATE SCRIPT WHICH CALLS jcart.php
AND RETURNS UPDATED CART HTML
+ $.post('<?php echo WP_PLUGIN_URL;?>/jcart/jcart-relay.php', { "<?php
echo $jcart['item_id']?>": itemId, "<?php echo $jcart['item_price']?>":
itemPrice, "<?php echo $jcart['item_name']?>": itemName, "<?php echo
$jcart['item_qty']?>": itemQty, "<?php echo $jcart['item_add']?>" : itemAdd
}, function(data) {
+
+ // REPLACE EXISTING CART HTML WITH UPDATED CART HTML
+ $('#jcart').html(data);
+ $('.jcart-hide').remove();
+
+ });
+
+ // PREVENT DEFAULT FORM ACTION
+ return false;
+
+ });
+
+
+ // WHEN THE VISITOR HITS THEIR ENTER KEY
+ // THE UPDATE AND EMPTY BUTTONS ARE ALREADY HIDDEN
+ // BUT THE VISITOR MAY UPDATE AN ITEM QTY, THEN HIT THEIR ENTER KEY
BEFORE FOCUSING ON ANOTHER ELEMENT
+ // THIS MEANS WE'D HAVE TO UPDATE THE ENTIRE CART RATHER THAN JUST THE
ITEM WHOSE QTY HAS CHANGED
+ // PREVENT ENTER KEY FROM SUBMITTING FORM SO USER MUST CLICK CHECKOUT OR
FOCUS ON ANOTHER ELEMENT WHICH TRIGGERS CHANGE FUNCTION BELOW
+ $('#jcart').keydown(function(e) {
+
+ // IF ENTER KEY
+ if (e.which == 13) {
+
+ // PREVENT DEFAULT ACTION
+ return false;
+ }
+ });
+
+
+ // JQUERY live METHOD MAKES FUNCTIONS BELOW AVAILABLE TO ELEMENTS ADDED
DYNAMICALLY VIA AJAX
+
+
+ // WHEN A REMOVE LINK IS CLICKED
+ $('#jcart a').live('click', function(){
+
+ // GET THE QUERY STRING OF THE LINK THAT WAS CLICKED
+ var queryString = $(this).attr('href');
+ queryString = queryString.split('=');
+
+ // THE ID OF THE ITEM TO REMOVE
+ var removeId = queryString[1];
+
+ // SEND ITEM ID VIA GET TO INTERMEDIATE SCRIPT WHICH CALLS jcart.php
AND RETURNS UPDATED CART HTML
+ $.get('<?php echo WP_PLUGIN_URL;?>/jcart/jcart-relay.php',
{ "jcart_remove": removeId, "jcart_is_checkout": isCheckout },
+ function(data) {
+
+ // REPLACE EXISTING CART HTML WITH UPDATED CART HTML
+ $('#jcart').html(data);
+ $('.jcart-hide').remove();
+ });
+
+ // PREVENT DEFAULT LINK ACTION
+ return false;
+ });
+
+
+ // WHEN AN ITEM QTY CHANGES
+ // CHANGE EVENT IS NOT CURRENTLY SUPPORTED BY LIVE METHOD
+ // STILL WORKS IN MOST BROWSERS, BUT NOT INTERNET EXPLORER
+ // INSTEAD WE SIMULATE THE CHANGE EVENT USING KEYUP AND SET A DELAY
BEFORE UPDATING THE CART
+ $('#jcart input[type="text"]').live('keyup', function(){
+
+ // GET ITEM ID FROM THE ITEM QTY INPUT ID VALUE, FORMATTED AS
jcart-item-id-n
+ var updateId = $(this).attr('id');
+ updateId = updateId.split('-');
+
+ // THE ID OF THE ITEM TO UPDATE
+ updateId = updateId[3];
+
+ // GET THE NEW QTY
+ var updateQty = $(this).val();
+
+ // AS LONG AS THE VISITOR HAS ENTERED A QTY
+ if (updateQty !== '')
+ {
+ // UPDATE THE CART ONE SECOND AFTER KEYUP
+ var updateDelay = setTimeout(function(){
+
+ // SEND ITEM INFO VIA POST TO INTERMEDIATE SCRIPT WHICH CALLS
jcart.php AND RETURNS UPDATED CART HTML
+ $.post('<?php echo WP_PLUGIN_URL;?>/jcart/jcart-relay.php',
{ "item_id": updateId, "item_qty": updateQty, "jcart_update_item": '<?php
echo $jcart['text']['update_button'];?>', "jcart_is_checkout": isCheckout
}, function(data) {
+
+ // REPLACE EXISTING CART HTML WITH UPDATED CART HTML
+ $('#jcart').html(data);
+ $('.jcart-hide').remove();
+ });
+
+ }, 1000);
+ }
+
+ // IF THE VISITOR PRESSES ANOTHER KEY BEFORE THE TIMER HAS EXPIRED,
CLEAR THE TIMER
+ // THE NEW KEYDOWN RESULTS IN A NEW KEYUP, TRIGGERING THE KEYUP
FUNCTION AGAIN AND RESETTING THE TIMER
+ // REPEATS UNTIL THE USER DOES NOT PRESS A KEY BEFORE THE TIMER EXPIRES
IN WHICH CASE THE AJAX POST IS EXECUTED
+ // THIS PREVENTS THE CART FROM BEING UPDATED ON EVERY KEYSTROKE
+ $(this).keydown(function(){
+ window.clearTimeout(updateDelay);
+ });
+ });
+ }); // END THE DOCUMENT READY FUNCTION
+ })(jQuery);
+
+
+
+
=======================================
--- /dev/null
+++
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/jcart-relay.php
Sat Dec 4 18:11:19 2010
@@ -0,0 +1,21 @@
+<?php
+
+// JCART v1.2
+// http://conceptlogic.com/jcart/
+
+// THIS FILE TAKES INPUT FROM AJAX REQUESTS VIA JQUERY post AND get
METHODS, THEN PASSES DATA TO JCART
+// RETURNS UPDATED CART HTML BACK TO SUBMITTING PAGE
+
+// INCLUDE JCART BEFORE SESSION START
+include_once 'jcart.php';
+
+// START SESSION
+session_start();
+
+// INITIALIZE JCART AFTER SESSION START
+$cart =& $_SESSION['jcart']; if (!is_object($cart)) $cart = new jcart();
+
+// PROCESS INPUT AND RETURN UPDATED CART HTML
+$cart->display_cart($jcart);
+
+?>
=======================================
--- /dev/null
+++
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/jcart.css
Sat Dec 4 18:11:19 2010
@@ -0,0 +1,41 @@
+JCART v1.2
+http://conceptlogic.com/jcart/
+
+
+#jcart * { margin:0; padding:0; font-family:arial, tahoma, verdana,
sans-serif; color:#000; }
+#jcart, #jcart input, #jcart-tooltip { font-size:12px; }
+
+#jcart fieldset { border:0; }
+
+#jcart table { width:100%; border:0; background:#fff;
border-collapse:collapse; }
+#jcart tr { }
+#jcart th, #jcart td { padding:5px; border:0; border:solid 1px #ccc;
vertical-align:top; text-align:left; font-weight:normal; }
+#jcart td.empty { text-align:center; }
+
+#jcart p.jcart-error { text-align:center; padding:5px; }
+
+#jcart strong#jcart-title { }
+
+#jcart th { background:#ccffcc }
+#jcart th#header { }
+$jcart th#footer { }
+
+#jcart td.jcart-item-qty { width:25%; }
+#jcart td.jcart-item-name { width:50%; font-weight:bold; }
+#jcart td.jcart-item-price { width:25%; font-weight:bold;
text-align:right; }
+#jcart td.jcart-item-price span { display:block; }
+
+#jcart a.jcart-remove { font-size:11px; font-weight:normal; }
+
+#jcart span#jcart-subtotal { display:block; }
+#jcart span#jcart-subtotal strong { }
+
+#jcart input.jcart-button { padding:2px; margin:2px;}
+
+#jcart input#jcart-checkout { float:right; }
+
+#jcart input#jcart-checkout-paypal { display:block; padding:10px;
margin:20px auto; }
+
+#jcart-tooltip { color:#000; border:solid 1px #000; padding:3px 7px 3px
25px; background:url(checkmark.png) 3px center no-repeat #f2fcee;
z-index:10000; }
+
+
=======================================
--- /dev/null
+++
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/jcart.php
Sat Dec 4 18:11:19 2010
@@ -0,0 +1,510 @@
+<?php
+
+// JCART v1.2
+// http://conceptlogic.com/jcart/
+
+// SESSION BASED SHOPPING CART CLASS FOR JCART
+
+/**********************************************************************
+Based on Webforce Cart v.1.5
+(c) 2004-2005 Webforce Ltd, NZ
+http://www.webforce.co.nz/cart/
+**********************************************************************/
+
+// USER CONFIG
+include_once('jcart-config.php');
+
+// DEFAULT CONFIG VALUES
+include_once('jcart-defaults.php');
+
+// JCART
+class jcart {
+ var $total = 0;
+ var $itemcount = 0;
+ var $items = array();
+ var $itemprices = array();
+ var $itemqtys = array();
+ var $itemnames = array();
+
+ // CONSTRUCTOR FUNCTION
+ function cart() {}
+
+ // GET CART CONTENTS
+ function get_contents()
+ {
+ $items = array();
+ foreach($this->items as $tmp_item)
+ {
+ $item = FALSE;
+
+ $item['id'] = $tmp_item;
+ $item['qty'] = $this->itemqtys[$tmp_item];
+ $item['price'] = $this->itemprices[$tmp_item];
+ $item['name'] = $this->itemnames[$tmp_item];
+ $item['subtotal'] = $item['qty'] * $item['price'];
+ $items[] = $item;
+ }
+ return $items;
+ }
+
+
+ // ADD AN ITEM
+ function add_item($item_id, $item_qty=1, $item_price, $item_name)
+ {
+
+ // VALIDATION
+ $valid_item_qty = $valid_item_price = false;
+
+ // IF THE ITEM QTY IS AN INTEGER, OR ZERO
+ if (preg_match("/^[0-9-]+$/i", $item_qty))
+ {
+ $valid_item_qty = true;
+ }
+ // IF THE ITEM PRICE IS A FLOATING POINT NUMBER
+ if (is_numeric($item_price))
+ {
+ $valid_item_price = true;
+ }
+
+ // ADD THE ITEM
+ if ($valid_item_qty !== false && $valid_item_price !== false)
+ {
+ // IF THE ITEM IS ALREADY IN THE CART, INCREASE THE QTY
+ if (($this->itemqtys[$item_id] > 0) && ($this->itemnames[$item_id] ==
$item_name))
+ {
+ $this->itemqtys[$item_id] = $item_qty + $this->itemqtys[$item_id];
+ $this->_update_total();
+ }
+ // THIS IS A NEW ITEM
+ else
+ {
+ $this->items[] = $item_id;
+ $this->itemqtys[$item_id] = $item_qty;
+ $this->itemprices[$item_id] = $item_price;
+ $this->itemnames[$item_id] = $item_name;
+ }
+ $this->_update_total();
+ return true;
+ }
+
+ else if ($valid_item_qty !== true)
+ {
+ $error_type = 'qty';
+ return $error_type;
+ }
+ else if ($valid_item_price !== true)
+ {
+ $error_type = 'price';
+ return $error_type;
+ }
+ }
+
+
+ // UPDATE AN ITEM
+ function update_item($item_id, $item_qty)
+ {
+ // IF THE ITEM QTY IS AN INTEGER, OR ZERO
+ // UPDATE THE ITEM
+ if (preg_match("/^[0-9-]+$/i", $item_qty))
+ {
+ if ($item_qty < 1)
+ {
+ $this->del_item($item_id);
+ }
+ else
+ {
+ $this->itemqtys[$item_id] = $item_qty;
+ }
+ $this->_update_total();
+ return true;
+ }
+ }
+
+
+ // UPDATE THE ENTIRE CART
+ // VISITOR MAY CHANGE MULTIPLE FIELDS BEFORE CLICKING UPDATE
+ // ONLY USED WHEN JAVASCRIPT IS DISABLED
+ // WHEN JAVASCRIPT IS ENABLED, THE CART IS UPDATED ONKEYUP
+ function update_cart()
+ {
+ // POST VALUE IS AN ARRAY OF ALL ITEM IDs IN THE CART
+ if (is_array($_POST['jcart_item_ids']))
+ {
+ // TREAT VALUES AS A STRING FOR VALIDATION
+ $item_ids = implode($_POST['jcart_item_ids']);
+ }
+
+ // POST VALUE IS AN ARRAY OF ALL ITEM QUANTITIES IN THE CART
+ if (is_array($_POST['jcart_item_qty']))
+ {
+ // TREAT VALUES AS A STRING FOR VALIDATION
+ $item_qtys = implode($_POST['jcart_item_qty']);
+ }
+
+ // IF NO ITEM IDs, THE CART IS EMPTY
+ if ($_POST['jcart_item_id'])
+ {
+ // IF THE ITEM QTY IS AN INTEGER, OR ZERO, OR EMPTY
+ // UPDATE THE ITEM
+ if (preg_match("/^[0-9-]+$/i", $item_qtys) || $item_qtys == '')
+ {
+ // THE INDEX OF THE ITEM AND ITS QUANTITY IN THEIR RESPECTIVE ARRAYS
+ $count = 0;
+
+ // FOR EACH ITEM IN THE CART
+ foreach ($_POST['jcart_item_id'] as $item_id)
+ {
+ // GET THE ITEM QTY AND DOUBLE-CHECK THAT THE VALUE IS AN INTEGER
+ $update_item_qty = intval($_POST['jcart_item_qty'][$count]);
+
+ if ($update_item_qty < 1)
+ {
+ $this->del_item($item_id);
+ }
+ else
+ {
+ // UPDATE THE ITEM
+ $this->update_item($item_id, $update_item_qty);
+ }
+
+ // INCREMENT INDEX FOR THE NEXT ITEM
+ $count++;
+ }
+ return true;
+ }
+ }
+ // IF NO ITEMS IN THE CART, RETURN TRUE TO PREVENT UNNECSSARY ERROR
MESSAGE
+ else if (!$_POST['jcart_item_id'])
+ {
+ return true;
+ }
+ }
+
+
+ // REMOVE AN ITEM
+ /*
+ GET VAR COMES FROM A LINK, WITH THE ITEM ID TO BE REMOVED IN ITS QUERY
STRING
+ AFTER AN ITEM IS REMOVED ITS ID STAYS SET IN THE QUERY STRING, PREVENTING
THE SAME ITEM FROM BEING ADDED BACK TO THE CART
+ SO WE CHECK TO MAKE SURE ONLY THE GET VAR IS SET, AND NOT THE POST VARS
+
+ USING POST VARS TO REMOVE ITEMS DOESN'T WORK BECAUSE WE HAVE TO PASS THE
ID OF THE ITEM TO BE REMOVED AS THE VALUE OF THE BUTTON
+ IF USING AN INPUT WITH TYPE SUBMIT, ALL BROWSERS DISPLAY THE ITEM ID,
INSTEAD OF ALLOWING FOR USER FRIENDLY TEXT SUCH AS 'remove'
+ IF USING AN INPUT WITH TYPE IMAGE, INTERNET EXPLORER DOES NOT SUBMIT THE
VALUE, ONLY X AND Y COORDINATES WHERE BUTTON WAS CLICKED
+ CAN'T USE A HIDDEN INPUT EITHER SINCE THE CART FORM HAS TO ENCOMPASS ALL
ITEMS TO RECALCULATE TOTAL WHEN A QUANTITY IS CHANGED, WHICH MEANS THERE
ARE MULTIPLE REMOVE BUTTONS AND NO WAY TO ASSOCIATE THEM WITH THE CORRECT
HIDDEN INPUT
+ */
+ function del_item($item_id)
+ {
+ $ti = array();
+ $this->itemqtys[$item_id] = 0;
+ foreach($this->items as $item)
+ {
+ if ($item != $item_id)
+ {
+ $ti[] = $item;
+ }
+ }
+ $this->items = $ti;
+ $this->_update_total();
+ }
+
+
+ // EMPTY THE CART
+ function empty_cart()
+ {
+ $this->total = 0;
+ $this->itemcount = 0;
+ $this->items = array();
+ $this->itemprices = array();
+ $this->itemqtys = array();
+ $this->itemnames = array();
+ }
+
+
+ // INTERNAL FUNCTION TO RECALCULATE TOTAL
+ function _update_total()
+ {
+ $this->itemcount = 0;
+ $this->total = 0;
+ if (sizeof($this->items > 0))
+ {
+ foreach($this->items as $item)
+ {
+ $this->total = $this->total + ($this->itemprices[$item] *
$this->itemqtys[$item]);
+
+ // TOTAL ITEMS IN CART (ORIGINAL wfCart COUNTED TOTAL NUMBER OF LINE
ITEMS)
+ $this->itemcount += $this->itemqtys[$item];
+ }
+ }
+ }
+
+
+ // PROCESS AND DISPLAY CART
+ function display_cart($jcart)
+ {
+ // JCART ARRAY HOLDS USER CONFIG SETTINGS
+ extract($jcart);
+
+ // ASSIGN USER CONFIG VALUES AS POST VAR LITERAL INDICES
+ // INDICES ARE THE HTML NAME ATTRIBUTES FROM THE USERS ADD-TO-CART FORM
+ $item_id = $_POST[$item_id];
+ $item_qty = $_POST[$item_qty];
+ $item_price = $_POST[$item_price];
+ $item_name = $_POST[$item_name];
+
+ // ADD AN ITEM
+ if ($_POST[$item_add])
+ {
+
+ $item_added = $this->add_item($item_id, $item_qty, $item_price,
$item_name);
+ // IF NOT TRUE THE ADD ITEM FUNCTION RETURNS THE ERROR TYPE
+ if ($item_added !== true)
+ {
+ $error_type = $item_added;
+ switch($error_type)
+ {
+ case 'qty':
+ $error_message = $text['quantity_error'];
+ break;
+ case 'price':
+ $error_message = $text['price_error'];
+ break;
+ }
+ }
+ }
+
+ // UPDATE A SINGLE ITEM
+ // CHECKING POST VALUE AGAINST $text ARRAY FAILS?? HAVE TO CHECK AGAINST
$jcart ARRAY
+ if ($_POST['jcart_update_item'] == $jcart['text']['update_button'])
+ {
+ $item_updated = $this->update_item($_POST['item_id'],
$_POST['item_qty']);
+ if ($item_updated !== true)
+ {
+ $error_message = $text['quantity_error'];
+ }
+ }
+
+ // UPDATE ALL ITEMS IN THE CART
+ if ($_POST['jcart_update_cart'] || $_POST['jcart_checkout'])
+ {
+ $cart_updated = $this->update_cart();
+ if ($cart_updated !== true)
+ {
+ $error_message = $text['quantity_error'];
+ }
+ }
+
+ // REMOVE AN ITEM
+ if ($_GET['jcart_remove'] && !$_POST[$item_add]
&& !$_POST['jcart_update_cart'] && !$_POST['jcart_check_out'])
+ {
+ $this->del_item($_GET['jcart_remove']);
+ }
+
+ // EMPTY THE CART
+ if ($_POST['jcart_empty'])
+ {
+ $this->empty_cart();
+ }
+
+ // DETERMINE WHICH TEXT TO USE FOR THE NUMBER OF ITEMS IN THE CART
+ if ($this->itemcount >= 0)
+ {
+ $text['items_in_cart'] = $text['multiple_items'];
+ }
+ if ($this->itemcount == 1)
+ {
+ $text['items_in_cart'] = $text['single_item'];
+ }
+
+ // DETERMINE IF THIS IS THE CHECKOUT PAGE
+ // WE FIRST CHECK THE REQUEST URI AGAINST THE USER CONFIG CHECKOUT (SET
WHEN THE VISITOR FIRST CLICKS CHECKOUT)
+ // WE ALSO CHECK FOR THE REQUEST VAR SENT FROM HIDDEN INPUT SENT BY AJAX
REQUEST (SET WHEN VISITOR HAS JAVASCRIPT ENABLED AND UPDATES AN ITEM QTY)
+ $is_checkout = strpos($_SERVER['REQUEST_URI'], $form_action);
+ if ($is_checkout !== false || $_REQUEST['jcart_is_checkout'] == 'true')
+ {
+ $is_checkout = true;
+ }
+ else
+ {
+ $is_checkout = false;
+ }
+
+ // OVERWRITE THE CONFIG FORM ACTION TO POST TO jcart-gateway.php INSTEAD
OF POSTING BACK TO CHECKOUT PAGE
+ // THIS ALSO ALLOWS US TO VALIDATE PRICES BEFORE SENDING CART CONTENTS
TO PAYPAL
+ if ($is_checkout == true)
+ {
+ $form_action = WP_PLUGIN_URL . '/jcart/jcart-gateway.php';
+ }
+ else
+ {
+ $form_action = '/' . $form_action;
+ }
+
+ // IF THIS ERROR IS TRUE THE VISITOR UPDATED THE CART FROM THE CHECKOUT
PAGE USING AN INVALID PRICE FORMAT
+ // PASSED AS A SESSION VAR SINCE THE CHECKOUT PAGE USES A HEADER REDIRECT
+ // IF PASSED VIA GET THE QUERY STRING STAYS SET EVEN AFTER SUBSEQUENT
POST REQUESTS
+ if ($_SESSION['quantity_error'] == true)
+ {
+ $error_message = $text['quantity_error'];
+ unset($_SESSION['quantity_error']);
+ }
+
+ // SET CURRENCY SYMBOL BASED ON SELECTED CURRENCY CODE
+ switch($paypal_currency)
+ {
+ case 'EUR':
+ $text['currency_symbol'] = '&#128;';
+ break;
+ case 'GBP':
+ $text['currency_symbol'] = '&#163;';
+ break;
+ case 'JPY':
+ $text['currency_symbol'] = '&#165;';
+ break;
+ case 'CHF':
+ $text['currency_symbol'] = 'CHF&nbsp;';
+ break;
+ case 'SEK':
+ case 'DKK':
+ case 'NOK':
+ $text['currency_symbol'] = 'Kr&nbsp;';
+ break;
+ case 'PLN':
+ $text['currency_symbol'] = 'z&#322;&nbsp;';
+ break;
+ case 'HUF':
+ $text['currency_symbol'] = 'Ft&nbsp;';
+ break;
+ case 'CZK':
+ $text['currency_symbol'] = 'K&#269;&nbsp;';
+ break;
+ case 'ILS':
+ $text['currency_symbol'] = '&#8362;&nbsp;';
+ break;
+ case 'AUD':
+ case 'CAD':
+ case 'USD':
+ case 'NZD':
+ case 'HKD':
+ case 'SGD':
+ case 'MXN':
+ default:
+ $text['currency_symbol'] = '$';
+ break;
+ }
+
+ // OUTPUT THE CART
+
+ // IF THERE'S AN ERROR MESSAGE WRAP IT IN SOME HTML
+ if ($error_message)
+ {
+ $error_message = "<p class='jcart-error'>$error_message</p>";
+ }
+
+ // DISPLAY THE CART HEADER
+ echo "\t$error_message\n";
+ echo "\t<form method='post' action='$form_action'>\n";
+ echo "\t\t<fieldset>\n";
+ echo "\t\t\t<table border='1'>\n";
+ echo "\t\t\t\t<tr>\n";
+ echo "\t\t\t\t\t<th id='jcart-header' colspan='3'>\n";
+ echo "\t\t\t\t\t\t<strong id='jcart-title'>" .
$text['cart_title'] . "</strong> (" . $this->itemcount . "&nbsp;" .
$text['items_in_cart'] .")\n";
+ echo "\t\t\t\t\t</th>\n";
+ echo "\t\t\t\t</tr>". "\n";
+
+ // IF ANY ITEMS IN THE CART
+ if ($this->itemcount > 0)
+ {
+
+ // DISPLAY LINE ITEMS
+ foreach($this->get_contents() as $item)
+ {
+ echo "\t\t\t\t<tr>\n";
+
+ // ADD THE ITEM ID AS THE INPUT ID ATTRIBUTE
+ // THIS ALLOWS US TO ACCESS THE ITEM ID VIA JAVASCRIPT ON QTY CHANGE,
AND THEREFORE UPDATE THE CORRECT ITEM
+ // NOTE THAT THE ITEM ID IS ALSO PASSED AS A SEPARATE FIELD FOR
PROCESSING VIA PHP
+ echo "\t\t\t\t\t<td class='jcart-item-qty'>\n";
+ echo "\t\t\t\t\t\t<input type='text' size='2' id='jcart-item-id-" .
$item['id'] . "' name='jcart_item_qty[ ]' value='" . $item['qty'] . "'
/>\n";
+ echo "\t\t\t\t\t</td>\n";
+ echo "\t\t\t\t\t<td class='jcart-item-name'>\n";
+ echo "\t\t\t\t\t\t" . $item['name'] . "<input type='hidden'
name='jcart_item_name[ ]' value='" . $item['name'] . "' />\n";
+ echo "\t\t\t\t\t\t<input type='hidden' name='jcart_item_id[ ]'
value='" . $item['id'] . "' />\n";
+ echo "\t\t\t\t\t</td>\n";
+ echo "\t\t\t\t\t<td class='jcart-item-price'>\n";
+ echo "\t\t\t\t\t\t<span>" . $text['currency_symbol'] .
number_format($item['subtotal'],2) . "</span><input type='hidden'
name='jcart_item_price[ ]' value='" . $item['price'] . "' />\n";
+ echo "\t\t\t\t\t\t<a class='jcart-remove' href='?jcart_remove=" .
$item['id'] . "'>" . $text['remove_link'] . "</a>\n";
+ echo "\t\t\t\t\t</td>\n";
+ echo "\t\t\t\t</tr>\n";
+ }
+ }
+
+ // THE CART IS EMPTY
+ else
+ {
+ echo "\t\t\t\t<tr><td colspan='3' class='empty'>" .
$text['empty_message'] . "</td></tr>\n";
+ }
+
+ // DISPLAY THE CART FOOTER
+ echo "\t\t\t\t<tr>\n";
+ echo "\t\t\t\t\t<th id='jcart-footer' colspan='3'>\n";
+
+ // DEFAULT INPUT TYPE
+ // CAN BE OVERRIDDEN IF USER SETS PATHS FOR BUTTON IMAGES
+ $input_type['checkout'] = $input_type['update'] = $input_type['empty'] =
$input_type['checkout_paypal'] = 'submit';
+
+ // IF THIS IS THE CHECKOUT HIDE THE CART CHECKOUT BUTTON
+ if ($is_checkout !== true)
+ {
+ if ($button['checkout']) { $input_type['checkout'] = 'image';
$src['checkout'] = ' src="' . $button['checkout'] . '" alt="' .
$text['checkout_button'] . '" title="" '; }
+ echo "\t\t\t\t\t\t<input type='" . $input_type['checkout'] . "' " .
$src['checkout'] . "id='jcart-checkout' name='jcart_checkout'
class='jcart-button' value='" . $text['checkout_button'] . "' />\n";
+ }
+
+ echo "\t\t\t\t\t\t<span id='jcart-subtotal'>" . $text['subtotal'] . ":
<strong>" . $text['currency_symbol'] .
number_format($this->total,2) . "</strong></span>\n";
+ echo "\t\t\t\t\t</th>\n";
+ echo "\t\t\t\t</tr>\n";
+ echo "\t\t\t</table>\n\n";
+
+ echo "\t\t\t<div class='jcart-hide'>\n";
+
+ if ($button['update']) { $input_type['update'] = 'image'; $src['update']
= ' src="' . $button['update'] . '" alt="' . $text['update_button'] . '"
title="" '; }
+ echo "\t\t\t\t<input type='" . $input_type['update'] . "' " .
$src['update'] ."name='jcart_update_cart' value='" .
$text['update_button'] . "' class='jcart-button' />\n";
+
+ if ($button['empty']) { $input_type['empty'] = 'image'; $src['empty']
= ' src="' . $button['empty'] . '" alt="' . $text['empty_button'] . '"
title="" '; }
+ echo "\t\t\t\t<input type='" . $input_type['empty'] . "' " .
$src['empty'] ."name='jcart_empty' value='" . $text['empty_button'] . "'
class='jcart-button' />\n";
+
+ echo "\t\t\t</div>\n";
+
+ // IF THIS IS THE CHECKOUT DISPLAY THE PAYPAL CHECKOUT BUTTON
+ if ($is_checkout == true)
+ {
+ // HIDDEN INPUT ALLOWS US TO DETERMINE IF WE'RE ON THE CHECKOUT PAGE
+ // WE NORMALLY CHECK AGAINST REQUEST URI BUT AJAX UPDATE SETS VALUE TO
jcart-relay.php
+ echo "\t\t\t<input type='hidden' id='jcart-is-checkout'
name='jcart_is_checkout' value='true' />\n";
+
+ // SEND THE URL OF THE CHECKOUT PAGE TO jcart-gateway.php
+ // WHEN JAVASCRIPT IS DISABLED WE USE A HEADER REDIRECT AFTER THE
UPDATE OR EMPTY BUTTONS ARE CLICKED
+ $protocol = 'http://'; if (!empty($_SERVER['HTTPS'])) { $protocol
= 'https://'; }
+ echo "\t\t\t<input type='hidden' id='jcart-checkout-page'
name='jcart_checkout_page' value='" . $protocol . $_SERVER['HTTP_HOST'] .
$_SERVER['REQUEST_URI'] . "' />\n";
+
+ // IF THE CART IS EMPTY
+ if ($this->itemcount < 1)
+ {
+ // DISABLE PAYPAL CHECKOUT
+ $disable_paypal_checkout = ' disabled="disabled" ';
+ }
+
+ // PAYPAL CHECKOUT BUTTON
+ if ($button['checkout_paypal']) { $input_type['checkout_paypal']
= 'image'; $src['checkout_paypal'] = ' src="' .
$button['checkout_paypal'] . '" alt="' .
$text['checkout_paypal_button'] . '" title="" '; }
+ echo "\t\t\t<input type='" . $input_type['checkout_paypal'] . "' " .
$src['checkout_paypal'] ."id='jcart-checkout-paypal'
name='jcart_checkout_paypal' value='" .
$text['checkout_paypal_button'] . "'" . $disable_paypal_checkout . " />\n";
+ }
+ echo "\t\t</fieldset>\n";
+ echo "\t</form>\n";
+
+ // IF UPDATING AN ITEM, FOCUS ON ITS QTY INPUT AFTER THE CART IS LOADED
(DOESN'T SEEM TO WORK IN IE7, OR IE8)
+ if ($_POST['jcart_update_item'])
+ {
+ echo "\t" . '<script
type="text/javascript">$(function(){$("#jcart-item-id-' .
$_POST['item_id'] . '").focus()});</script>' . "\n";
+ }
+ }
+ }
+?>
=======================================
--- /dev/null
+++
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/logo.jpg
Sat Dec 4 18:11:19 2010
Binary file, no diff available.
=======================================
--- /dev/null
+++
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/themes/default/checkout.php
Sat Dec 4 18:11:19 2010
@@ -0,0 +1,34 @@
+<?php
+/**
+ * @package WordPress
+ * @subpackage Default_Theme
+ */
+
+/*
+Template Name: jCart Checkout
+*/
+
+get_header(); ?>
+
+ <div id="content" class="narrowcolumn">
+
+ <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
+ <div class="post" id="post-<?php the_ID(); ?>">
+ <h2><?php the_title(); ?></h2>
+ <div class="entry">
+
+ <div id="jcart"><?php wp_jcart($location = 'content');?></div>
+
+ <?php the_content('<p class="serif">Read the rest of this page
&raquo;</p>'); ?>
+
+ <?php wp_link_pages(array('before'
=> '<p><strong>Pages:</strong> ', 'after' => '</p>', 'next_or_number'
=> 'number')); ?>
+
+ </div>
+ </div>
+ <?php endwhile; endif; ?>
+ <?php edit_post_link('Edit this entry.', '<p>', '</p>'); ?>
+ </div>
+
+<?php get_sidebar(); ?>
+
+<?php get_footer(); ?>
=======================================
--- /dev/null
+++
/svn/trunk/reamus/shoppingcart/jcart-wordpress-plugin.0.9.1/jcart/themes/default/demo-store.php
Sat Dec 4 18:11:19 2010
@@ -0,0 +1,86 @@
+<?php
+/**
+ * @package WordPress
+ * @subpackage Default_Theme
+ */
+
+/*
+Template Name: jCart Demo Store
+*/
+
+get_header(); ?>
+
+ <div id="content" class="narrowcolumn">
+
+ <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
+ <div class="post" id="post-<?php the_ID(); ?>">
+ <h2><?php the_title(); ?></h2>
+ <div class="entry">
+
+ <?php the_content('<p class="serif">Read the rest of this page
&raquo;</p>'); ?>
+
+ <form method="post" action="" class="jcart">
+ <fieldset>
+ <input type="hidden" name="my-item-id" value="1" />
+ <input type="hidden" name="my-item-name" value="Soccer Ball" />
+ <input type="hidden" name="my-item-price" value="25.00" />
+
+ <ul>
+ <li><strong>Soccer Ball</strong></li>
+ <li>Price: $25.00</li>
+ <li>
+ <label>Qty: <input type="text" name="my-item-qty" value="1"
size="3" /></label>
+ </li>
+ </ul>
+
+ <input type="submit" name="my-add-button" value="add to cart"
class="button" />
+ </fieldset>
+ </form>
+
+ <form method="post" action="" class="jcart">
+ <fieldset>
+ <input type="hidden" name="my-item-id" value="2" />
+ <input type="hidden" name="my-item-name" value="Baseball Mitt" />
+ <input type="hidden" name="my-item-price" value="19.50" />
+
+ <ul>
+ <li><strong>Baseball Mitt</strong></li>
+ <li>Price: $19.50</li>
+ <li>
+ <label>Qty: <input type="text" name="my-item-qty" value="1"
size="3" /></label>
+ </li>
+ </ul>
+
+ <input type="submit" name="my-add-button" value="add to cart"
class="button" />
+ </fieldset>
+ </form>
+
+ <form method="post" action="" class="jcart">
+ <fieldset>
+ <input type="hidden" name="my-item-id" value="3" />
+ <input type="hidden" name="my-item-name" value="Hockey Stick" />
+ <input type="hidden" name="my-item-price" value="33.25" />
+
+ <ul>
+ <li><strong>Hockey Stick</strong></li>
+ <li>Price: $33.25</li>
+ <li>
+ <label>Qty: <input type="text" name="my-item-qty" value="1"
size="3" /></label>
+ </li>
+ </ul>
+
+ <input type="submit" name="my-add-button" value="add to cart"
class="button" />
+ </fieldset>
+ </form>
+
+ <?php wp_link_pages(array('before'
=> '<p><strong>Pages:</strong> ', 'after' => '</p>', 'next_or_number'
=> 'number')); ?>
+
+ </div>
+ </div>
+ <?php endwhile; endif; ?>
+ <?php edit_post_link('Edit this entry.', '<p>', '</p>'); ?>
+ </div>
+
+<?php get_sidebar(); ?>
+
+<?php get_footer(); ?>
=======================================
--- /dev/null
+++ /svn/trunk/reamus/shoppingcart/jcart_1.2/checkout.php Sat Dec 4
18:11:19 2010
@@ -0,0 +1,69 @@
+<?php
+
+// INCLUDE JCART BEFORE SESSION START
+include 'jcart/jcart.php';
+
+// START SESSION
+session_start();
+
+// INITIALIZE JCART AFTER SESSION START
+$cart =& $_SESSION['jcart']; if(!is_object($cart)) $cart = new jcart();
+
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+
+ <title>jCart - Free Ajax/PHP shopping cart</title>
+
+ <style type="text/css">
+ * { margin:0; padding:0; }
+
+ html { background:#fff; font-family:trebuchet ms, candara, sans-serif;
font-size:62.5%; }
+ body { font-size:1.5em; }
+
+ #wrapper { margin:30px auto 250px auto; width:890px; border:solid 1px
#ccc; padding:30px; background:#efefef; }
+
+ h2 { margin-bottom:1em; }
+
+ #sidebar { width:35%; float:right; }
+
+ #content { width:60%; }
+
+ .jcart { margin:0 20px 20px 0; padding-top:20px; border:dashed 2px
#66cc66; float:left; background:#fff; text-align:center; }
+ .jcart ul { margin:0; list-style:none; padding:0 20px; text-align:left;
}
+ .jcart fieldset { border:0; }
+ .jcart strong { color:#000066; }
+ .jcart .button { margin:20px; padding:5px; }
+
+ fieldset { border:0; }
+ #paypal-button { display:block; padding:10px; margin:20px auto; }
+
+ .clear { clear:both; }
+ </style>
+
+ <link rel="stylesheet" type="text/css" media="screen, projection"
href="jcart/jcart.css" />
+ </head>
+ <body>
+ <div id="wrapper">
+ <h2>Demo Checkout</h2>
+
+ <div id="sidebar">
+ </div>
+
+ <div id="content">
+ <?php $cart->display_cart($jcart);?>
+
+ <p><a href="store.php">&larr; Continue shopping</a></p>
+
+ <div class="clear"></div>
+ </div>
+ </div>
+
+ <script type="text/javascript" src="jcart/jquery-1.3.2.min.js"></script>
+ <script type="text/javascript"
src="jcart/jcart-javascript.min.php"></script>
+ </body>
+</html>
=======================================
--- /dev/null
+++ /svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/MIT License.txt Sat Dec
4 18:11:19 2010
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2009 Concept Logic
+
+Permission is hereby granted, free of charge, to any person obtaining a
copy
+of this software and associated documentation files (the "Software"), to
deal
+in the Software without restriction, including without limitation the
rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
=======================================
--- /dev/null
+++ /svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/checkmark.png Sat Dec 4
18:11:19 2010
Binary file, no diff available.
=======================================
--- /dev/null
+++ /svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/jcart-config.php Sat
Dec 4 18:11:19 2010
@@ -0,0 +1,59 @@
+<?php
+
+// JCART v1.2
+// http://conceptlogic.com/jcart/
+
+///////////////////////////////////////////////////////////////////////
+// REQUIRED SETTINGS
+
+// THE HTML NAME ATTRIBUTES USED IN YOUR ADD-TO-CART FORM
+$jcart['item_id'] = 'my-item-id'; // ITEM ID
+$jcart['item_name'] = 'my-item-name'; // ITEM NAME
+$jcart['item_price'] = 'my-item-price'; // ITEM PRICE
+$jcart['item_qty'] = 'my-item-qty'; // ITEM QTY
+$jcart['item_add'] = 'my-add-button'; // ADD-TO-CART BUTTON
+
+// PATH TO THE DIRECTORY CONTAINING JCART FILES
+$jcart['path'] = '/jcart/1.2/jcart/';
+
+// PATH TO YOUR CHECKOUT PAGE (RELATIVE TO YOUR DOMAIN ROOT)
+// USED AS THE ACTION ATTRIBUTE FOR THE SHOPPING CART FORM
+$jcart['form_action'] = '/jcart/1.2/checkout.php';
+
+// YOUR PAYPAL SECURE MERCHANT ACCOUNT ID
+$jcart['paypal_id'] = '';
+
+
+///////////////////////////////////////////////////////////////////////
+// OPTIONAL SETTINGS
+
+// OVERRIDE DEFAULT CART TEXT
+$jcart['text']['cart_title'] = ''; // Shopping Cart
+$jcart['text']['single_item'] = ''; // Item
+$jcart['text']['multiple_items'] = ''; // Items
+$jcart['text']['currency_symbol'] = ''; // $
+$jcart['text']['subtotal'] = ''; // Subtotal
+
+$jcart['text']['update_button'] = ''; // update
+$jcart['text']['checkout_button'] = ''; // checkout
+$jcart['text']['checkout_paypal_button'] = ''; // Checkout with PayPal
+$jcart['text']['remove_link'] = ''; // remove
+$jcart['text']['empty_button'] = ''; // empty
+$jcart['text']['empty_message'] = ''; // Your cart is empty!
+$jcart['text']['item_added_message'] = ''; // Item added!
+
+$jcart['text']['price_error'] = ''; // Invalid price format!
+$jcart['text']['quantity_error'] = ''; // Item quantities must be whole
numbers!
+$jcart['text']['checkout_error'] =''; // Your order could not be
processed!
+
+// OVERRIDE THE DEFAULT BUTTONS WITH YOUR IMAGES BY SETTING THE PATH FOR
EACH IMAGE
+$jcart['button']['checkout'] = '';
+$jcart['button']['paypal_checkout'] = '';
+$jcart['button']['update'] = '';
+$jcart['button']['empty'] = '';
+
+// ADD A UNIQUE TOKEN TO FORM POSTS TO PREVENT CSRF EXPLOITS
+// LEARN MORE: http://conceptlogic.com/jcart/csrf/
+$jcart['csrf_token'] = false;
+
+?>
=======================================
--- /dev/null
+++ /svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/jcart-defaults.php Sat
Dec 4 18:11:19 2010
@@ -0,0 +1,30 @@
+<?php
+
+// JCART v1.2
+// http://conceptlogic.com/jcart/
+
+// DEFAULT CART TEXT USED IF NOT OVERRIDDEN IN jcart-config.php
+// DEFAULTS MUST BE AVAILABLE TO jcart.php AND jcart-javascript.php
+// INCLUDED AS A SEPARATE FILE TO SIMPLIFY USER CONFIG
+
+if (!$jcart['path']) die('The path to jCart isn\'t set. Please see
<strong>jcart-config.php</strong> for more info.');
+
+if (!$jcart['text']['cart_title']) $jcart['text']['cart_title']
= 'Shopping Cart';
+if (!$jcart['text']['single_item']) $jcart['text']['single_item']
= 'Item';
+if (!$jcart['text']['multiple_items']) $jcart['text']['multiple_items']
= 'Items';
+if (!$jcart['text']['currency_symbol']) $jcart['text']['currency_symbol']
= '$';
+if (!$jcart['text']['subtotal']) $jcart['text']['subtotal']
= 'Subtotal';
+
+if (!$jcart['text']['update_button']) $jcart['text']['update_button']
= 'update';
+if (!$jcart['text']['checkout_button']) $jcart['text']['checkout_button']
= 'checkout';
+if (!$jcart['text']['checkout_paypal_button'])
$jcart['text']['checkout_paypal_button'] = 'Checkout with PayPal';
+if (!$jcart['text']['remove_link']) $jcart['text']['remove_link']
= 'remove';
+if (!$jcart['text']['empty_button']) $jcart['text']['empty_button']
= 'empty';
+if (!$jcart['text']['empty_message']) $jcart['text']['empty_message']
= 'Your cart is empty!';
+if (!$jcart['text']['item_added_message'])
$jcart['text']['item_added_message'] = 'Item added!';
+
+if (!$jcart['text']['price_error']) $jcart['text']['price_error']
= 'Invalid price format!';
+if (!$jcart['text']['quantity_error']) $jcart['text']['quantity_error']
= 'Item quantities must be whole numbers!';
+if (!$jcart['text']['checkout_error']) $jcart['text']['checkout_error']
= 'Your order could not be processed!';
+
+?>
=======================================
--- /dev/null
+++ /svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/jcart-gateway.php Sat
Dec 4 18:11:19 2010
@@ -0,0 +1,127 @@
+<?php
+
+// JCART v1.2
+// http://conceptlogic.com/jcart/
+
+// THIS FILE IS CALLED WHEN ANY BUTTON ON THE CHECKOUT PAGE (PAYPAL
CHECKOUT, UPDATE, OR EMPTY) IS CLICKED
+// WE CAN ONLY DEFINE ONE FORM ACTION, SO THIS FILE ALLOWS US TO FORK THE
FORM SUBMISSION DEPENDING ON WHICH BUTTON WAS CLICKED
+// ALSO ALLOWS US TO VERIFY PRICES BEFORE SUBMITTING TO PAYPAL
+
+// INCLUDE JCART BEFORE SESSION START
+include_once 'jcart.php';
+
+// START SESSION
+session_start();
+
+// INITIALIZE JCART AFTER SESSION START
+$cart =& $_SESSION['jcart']; if(!is_object($cart)) $cart = new jcart();
+
+// WHEN JAVASCRIPT IS DISABLED THE UPDATE AND EMPTY BUTTONS ARE DISPLAYED
+// RE-DISPLAY THE CART IF THE VISITOR CLICKS EITHER BUTTON
+if ($_POST['jcart_update_cart'] || $_POST['jcart_empty'])
+ {
+
+ // UPDATE THE CART
+ if ($_POST['jcart_update_cart'])
+ {
+ $cart_updated = $cart->update_cart();
+ if ($cart_updated !== true)
+ {
+ $_SESSION['quantity_error'] = true;
+ }
+ }
+
+ // EMPTY THE CART
+ if ($_POST['jcart_empty'])
+ {
+ $cart->empty_cart();
+ }
+
+ // REDIRECT BACK TO THE CHECKOUT PAGE
+ $protocol = 'http://'; if (!empty($_SERVER['HTTPS'])) { $protocol
= 'https://'; }
+
+ header('Location: ' . $protocol . $_SERVER['HTTP_HOST'] .
$jcart['form_action']);
+ exit;
+ }
+
+// THE VISITOR HAS CLICKED THE PAYPAL CHECKOUT BUTTON
+else
+ {
+
+ ///////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////
+ /*
+
+ A malicious visitor may try to change item prices before checking out,
+ either via javascript or by posting from an external script.
+
+ Here you can add PHP code that validates the submitted prices against
+ your database or validates against hard-coded prices.
+
+ The cart data has already been sanitized and is available thru the
+ $cart->get_contents() function. For example:
+
+ foreach ($cart->get_contents() as $item)
+ {
+ $item_id = $item['id'];
+ $item_name = $item['name'];
+ $item_price = $item['price'];
+ $item_qty = $item['qty'];
+ }
+
+ */
+ ///////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////
+
+ $valid_prices = true;
+
+ ///////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////
+
+ // IF THE SUBMITTED PRICES ARE NOT VALID
+ if ($valid_prices !== true)
+ {
+ // KILL THE SCRIPT
+ die($jcart['text']['checkout_error']);
+ }
+
+ // PRICE VALIDATION IS COMPLETE
+ // SEND CART CONTENTS TO PAYPAL USING THEIR UPLOAD METHOD, FOR DETAILS
SEE http://tinyurl.com/djoyoa
+ else if ($valid_prices === true)
+ {
+ // PAYPAL COUNT STARTS AT ONE INSTEAD OF ZERO
+ $paypal_count = 1;
+ $items_query_string;
+ foreach ($cart->get_contents() as $item)
+ {
+ // BUILD THE QUERY STRING
+ $items_query_string .= '&item_name_' . $paypal_count . '=' .
$item['name'];
+ $items_query_string .= '&amount_' . $paypal_count . '=' .
$item['price'];
+ $items_query_string .= '&quantity_' . $paypal_count . '=' .
$item['qty'];
+
+ // INCREMENT THE COUNTER
+ ++$paypal_count;
+ }
+
+ // EMPTY THE CART
+ $cart->empty_cart();
+
+ if($jcart['paypal_id'])
+ {
+ // REDIRECT TO PAYPAL WITH MERCHANT ID AND CART CONTENTS
+ header( 'Location:
https://www.paypal.com/cgi-bin/webscr?cmd=_cart&upload=1&business=' .
$jcart['paypal_id'] . $items_query_string);
+ exit;
+ }
+ else
+ // THE USER HAS NOT CONFIGURED A PAYPAL ID
+ // DISPLAY THE PAYPAL URL WITH AN ERROR MESSAGE
+ {
+ echo 'PayPal integration requires a secure merchant ID. Please see the
<a href="http://conceptlogic.com/jcart/install.php">installation
instructions</a> for more info.<br /><br />';
+ echo 'Below is the URL that would be sent to PayPal if a merchant ID
was set in <strong>jcart-config.php</strong>:<br /><br />';
+
echo 'https://www.paypal.com/cgi-bin/webscr?cmd=_cart&upload=1&business=PAYPAL_ID' .
$items_query_string;
+ exit;
+ }
+ }
+ }
+
+?>
=======================================
--- /dev/null
+++ /svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/jcart-javascript.min.php
Sat Dec 4 18:11:19 2010
@@ -0,0 +1,24 @@
+<?php
+
+// JCART v1.2
+// http://conceptlogic.com/jcart/
+
+// INCLUDE CONFIG SO THIS SCRIPT HAS ACCESS USER FIELD NAMES
+require_once('jcart-config.php');
+
+// INCLUDE DEFAULT VALUES SINCE WE NEED TO PASS THE VALUE OF THE UPDATE
BUTTON BACK TO jcart.php IF UPDATING AN ITEM QTY
+// IF NO VALUE IS SET IN CONFIG, THERE MUST BE A DEFAULT VALUE SINCE
SIMPLY CHECKING FOR THE VAR ITSELF FAILS
+require_once('jcart-defaults.php');
+
+// OUTPUT PHP FILE AS JAVASCRIPT
+header('content-type:application/x-javascript');
+
+// PREVENT CACHING
+header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
+header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
+
+// CONTINUE THE SESSION
+session_start();
+
+?>
+$(function(){(function(d){d.fn.jcartTooltip=function(a,q){a=d.extend({content:null,follow:true,auto:true,fadeIn:0,fadeOut:0,appendTip:document.body,offsetY:25,offsetX:-10,style:{},id:'jcart-tooltip'},a|
|
{});if(!a.style&&typeof
a.style!="object"){a.style={};a.style.zIndex="1000"}else{a.style=d.extend({},a.style|
|{})}a.style.display="none";a.style.position="absolute";var n={};var
o=false;var f=document.createElement('div');f.id=a.id;for(var m in
a.style){f.style[m]=a.style[m]}function
fillTooltip(b){if(b){d(f).html(a.content)}}fillTooltip(a.content&&!a.ajax);d(f).appendTo(a.appendTip);return
this.each(function(){this.onclick=function(c){function e(){var
b;if(a.content){b="block"}else{b="none"}if(b=="block"&&a.fadeIn){d(f).fadeIn(a.fadeIn);setTimeout(function(){d(f).fadeOut(a.fadeOut)},1000)}}e()};this.onmousemove=function(b){var
c=(b)?b:window.event;n=this;if(a.follow){var e=d(window).scrollTop();var
g=d(window).scrollLeft();var h=c.clientY+e+a.offsetY;var
i=c.clientX+g+a.offsetX;var k=d(window).width()+g-d(f).outerWidth();var
l=d(window).height()+e-d(f).outerHeight();o=(h>l||
i>k)?true:false;if(i-g<=0&&a.offsetX<0){i=g}else
if(i>k){i=k}if(h-e<=0&&a.offsetY<0){h=e}else
if(h>l){h=l}f.style.top=h+"px";f.style.left=i+"px"}};this.onmouseout=function(){d(f).css('display','none')}})}})(jQuery);$('.jcart
input[name="<?php echo
$jcart['item_add'];?>"]').jcartTooltip({content:'<?php echo
$jcart['text']['item_added_message'];?>',fadeIn:500,fadeOut:350});var
p=$('td.jcart-item-qty').html();if(p===null){$('#jcart-paypal-checkout').attr('disabled','disabled')}$('.jcart-hide').remove();var
j=$('#jcart-is-checkout').val();if(j!=='true'){j='false'}$('form.jcart').submit(function(){var
c=$(this).find('input[name=<?php echo $jcart['item_id']?>]').val();var
e=$(this).find('input[name=<?php echo $jcart['item_price']?>]').val();var
g=$(this).find('input[name=<?php echo $jcart['item_name']?>]').val();var
h=$(this).find('input[name=<?php echo $jcart['item_qty']?>]').val();var
i=$(this).find('input[name=<?php echo
$jcart['item_add']?>]').val();$.post('<?php echo
$jcart['path'];?>jcart-relay.php',{"<?php echo
$jcart['item_id']?>":c,"<?php echo $jcart['item_price']?>":e,"<?php echo
$jcart['item_name']?>":g,"<?php echo $jcart['item_qty']?>":h,"<?php echo
$jcart['item_add']?>":i,"jcart_token":$('[name=jcart_token]').val()},function(b){$('#jcart').html(b);$('.jcart-hide').remove()});return
false});$('#jcart').keydown(function(b){if(b.which==13){return
false}});$('#jcart a').live('click',function(){var
c=$(this).attr('href');c=c.split('=');var e=c[1];$.get('<?php echo
$jcart['path'];?>jcart-relay.php',{"jcart_remove":e,"jcart_is_checkout":j},function(b){$('#jcart').html(b);$('.jcart-hide').remove()});return
false});$('#jcart input[type="text"]').live('keyup',function(){var
c=$(this).attr('id');c=c.split('-');c=c[3];var
e=$(this).val();if(e!==''){var g=setTimeout(function(){$.post('<?php echo
$jcart['path'];?>jcart-relay.php',{"item_id":c,"item_qty":e,"jcart_update_item":'<?php
echo
$jcart['text']['update_button'];?>',"jcart_is_checkout":j,"jcart_token":$('[name=jcart_token]').val()},function(b){$('#jcart').html(b);$('.jcart-hide').remove()})},1000)}$(this).keydown(function(){window.clearTimeout(g)})})});
=======================================
--- /dev/null
+++ /svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/jcart-javascript.php Sat
Dec 4 18:11:19 2010
@@ -0,0 +1,277 @@
+<?php
+
+// JCART v1.2
+// http://conceptlogic.com/jcart/
+
+// INCLUDE CONFIG SO THIS SCRIPT HAS ACCESS USER FIELD NAMES
+require_once('jcart-config.php');
+
+// INCLUDE DEFAULT VALUES SINCE WE NEED TO PASS THE VALUE OF THE UPDATE
BUTTON BACK TO jcart.php IF UPDATING AN ITEM QTY
+// IF NO VALUE IS SET IN CONFIG, THERE MUST BE A DEFAULT VALUE SINCE
SIMPLY CHECKING FOR THE VAR ITSELF FAILS
+require_once('jcart-defaults.php');
+
+// OUTPUT PHP FILE AS JAVASCRIPT
+header('content-type:application/x-javascript');
+
+// PREVENT CACHING
+header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
+header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
+
+// CONTINUE THE SESSION
+session_start();
+
+?>
+
+// WHEN THE DOCUMENT IS READY
+$(function(){
+
+ /**********************************************************************
+ Tooltips based on Wayfarer Tooltip 1.0.2
+ (c) 2006-2009 Abel Mohler
+ http://www.wayfarerweb.com/wtooltip.php
+ **********************************************************************/
+
+ ( function( $ ) {
+ $.fn.jcartTooltip = function( o, callback ) {
+ o = $.extend( {
+ content: null,
+ follow: true,
+ auto: true,
+ fadeIn: 0,
+ fadeOut: 0,
+ appendTip: document.body,
+ offsetY: 25,
+ offsetX: -10,
+ style: {},
+ id: 'jcart-tooltip'
+ }, o || {});
+
+ if ( !o.style && typeof o.style != "object" )
+ {
+ o.style = {}; o.style.zIndex = "1000";
+ }
+ else
+ {
+ o.style = $.extend( {}, o.style || {});
+ }
+
+ o.style.display = "none";
+ o.style.position = "absolute";
+
+ var over = {};
+ var maxed = false;
+ var tooltip = document.createElement( 'div' );
+
+ tooltip.id = o.id;
+
+ for ( var p in o.style ) { tooltip.style[p] = o.style[p]; }
+
+ function fillTooltip( condition ) { if ( condition ) { $( tooltip
).html( o.content ); }}
+
+ fillTooltip( o.content && !o.ajax );
+ $( tooltip ).appendTo( o.appendTip );
+
+ return this.each( function() {
+ this.onclick = function( ev ) {
+ function _execute() {
+ var display;
+ if ( o.content )
+ {
+ display = "block";
+ }
+ else
+ {
+ display = "none";
+ }
+ if ( display == "block" && o.fadeIn )
+ {
+ $( tooltip ).fadeIn( o.fadeIn );
+
+ setTimeout(function(){
+ $( tooltip ).fadeOut( o.fadeOut );
+ }, 1000);
+ }
+ }
+ _execute();
+ };
+
+ this.onmousemove = function( ev ) {
+ var e = ( ev ) ? ev : window.event;
+ over = this;
+ if ( o.follow ) {
+ var scrollY = $( window ).scrollTop();
+ var scrollX = $( window ).scrollLeft();
+ var top = e.clientY + scrollY + o.offsetY;
+ var left = e.clientX + scrollX + o.offsetX;
+ var maxLeft = $( window ).width() + scrollX - $( tooltip
).outerWidth();
+ var maxTop = $( window ).height() + scrollY - $( tooltip
).outerHeight();
+ maxed = ( top > maxTop || left > maxLeft ) ? true : false;
+
+ if ( left - scrollX <= 0 && o.offsetX < 0 )
+ {
+ left = scrollX;
+ }
+ else if ( left > maxLeft )
+ {
+ left = maxLeft;
+ }
+ if ( top - scrollY <= 0 && o.offsetY < 0 )
+ {
+ top = scrollY;
+ }
+ else if ( top > maxTop )
+ {
+ top = maxTop;
+ }
+
+ tooltip.style.top = top + "px";
+ tooltip.style.left = left + "px";
+ }
+ };
+
+ this.onmouseout = function() {
+ $( tooltip ).css('display', 'none');
+ };
+
+
+
+ });
+ };
+ })( jQuery );
+
+ // SHOW A TOOLTIP AFTER VISITOR CLICKS THE ADD-TO-CART
+ // IN CASE THE CART IS OFF SCREEN
+ $('.jcart input[name="<?php echo
$jcart['item_add'];?>"]').jcartTooltip({content: '<?php echo
$jcart['text']['item_added_message'];?>', fadeIn: 500, fadeOut: 350 });
+
+ // CHECK IF THERE ARE ANY ITEMS IN THE CART
+ var cartHasItems = $('td.jcart-item-qty').html();
+ if(cartHasItems === null)
+ {
+ // DISABLE THE PAYPAL CHECKOUT BUTTON
+ $('#jcart-paypal-checkout').attr('disabled', 'disabled');
+ }
+
+ // HIDE THE UPDATE AND EMPTY BUTTONS SINCE THESE ARE ONLY USED WHEN
JAVASCRIPT IS DISABLED
+ $('.jcart-hide').remove();
+
+ // DETERMINE IF THIS IS THE CHECKOUT PAGE BY CHECKING FOR HIDDEN INPUT
VALUE
+ // SENT VIA AJAX REQUEST TO jcart.php WHICH DECIDES WHETHER TO DISPLAY
THE CART CHECKOUT BUTTON OR THE PAYPAL CHECKOUT BUTTON BASED ON ITS VALUE
+ // WE NORMALLY CHECK AGAINST REQUEST URI BUT AJAX UPDATE SETS VALUE TO
jcart-relay.php
+ var isCheckout = $('#jcart-is-checkout').val();
+
+ // IF THIS IS NOT THE CHECKOUT THE HIDDEN INPUT DOESN'T EXIST AND NO
VALUE IS SET
+ if (isCheckout !== 'true') { isCheckout = 'false'; }
+
+
+ // WHEN AN ADD-TO-CART FORM IS SUBMITTED
+ $('form.jcart').submit(function(){
+
+ // GET INPUT VALUES FOR USE IN AJAX POST
+ var itemId = $(this).find('input[name=<?php echo
$jcart['item_id']?>]').val();
+ var itemPrice = $(this).find('input[name=<?php echo
$jcart['item_price']?>]').val();
+ var itemName = $(this).find('input[name=<?php echo
$jcart['item_name']?>]').val();
+ var itemQty = $(this).find('input[name=<?php echo
$jcart['item_qty']?>]').val();
+ var itemAdd = $(this).find('input[name=<?php echo
$jcart['item_add']?>]').val();
+
+ // SEND ITEM INFO VIA POST TO INTERMEDIATE SCRIPT WHICH CALLS jcart.php
AND RETURNS UPDATED CART HTML
+ $.post('<?php echo $jcart['path'];?>jcart-relay.php', { "<?php echo
$jcart['item_id']?>": itemId, "<?php echo $jcart['item_price']?>":
itemPrice, "<?php echo $jcart['item_name']?>": itemName, "<?php echo
$jcart['item_qty']?>": itemQty, "<?php echo $jcart['item_add']?>" :
itemAdd, "jcart_token": ""}, function(data) {
+
+ // REPLACE EXISTING CART HTML WITH UPDATED CART HTML
+ $('#jcart').html(data);
+ $('.jcart-hide').remove();
+
+ });
+
+ // PREVENT DEFAULT FORM ACTION
+ return false;
+
+ });
+
+
+ // WHEN THE VISITOR HITS THEIR ENTER KEY
+ // THE UPDATE AND EMPTY BUTTONS ARE ALREADY HIDDEN
+ // BUT THE VISITOR MAY UPDATE AN ITEM QTY, THEN HIT THEIR ENTER KEY
BEFORE FOCUSING ON ANOTHER ELEMENT
+ // THIS MEANS WE'D HAVE TO UPDATE THE ENTIRE CART RATHER THAN JUST THE
ITEM WHOSE QTY HAS CHANGED
+ // PREVENT ENTER KEY FROM SUBMITTING FORM SO USER MUST CLICK CHECKOUT OR
FOCUS ON ANOTHER ELEMENT WHICH TRIGGERS CHANGE FUNCTION BELOW
+ $('#jcart').keydown(function(e) {
+
+ // IF ENTER KEY
+ if(e.which == 13) {
+
+ // PREVENT DEFAULT ACTION
+ return false;
+ }
+ });
+
+
+ // JQUERY live METHOD MAKES FUNCTIONS BELOW AVAILABLE TO ELEMENTS ADDED
DYNAMICALLY VIA AJAX
+
+ // WHEN A REMOVE LINK IS CLICKED
+ $('#jcart a').live('click', function(){
+
+ // GET THE QUERY STRING OF THE LINK THAT WAS CLICKED
+ var queryString = $(this).attr('href');
+ queryString = queryString.split('=');
+
+ // THE ID OF THE ITEM TO REMOVE
+ var removeId = queryString[1];
+
+ // SEND ITEM ID VIA GET TO INTERMEDIATE SCRIPT WHICH CALLS jcart.php AND
RETURNS UPDATED CART HTML
+ $.get('<?php echo $jcart['path'];?>jcart-relay.php', { "jcart_remove":
removeId, "jcart_is_checkout": isCheckout },
+ function(data) {
+
+ // REPLACE EXISTING CART HTML WITH UPDATED CART HTML
+ $('#jcart').html(data);
+ $('.jcart-hide').remove();
+ });
+
+ // PREVENT DEFAULT LINK ACTION
+ return false;
+ });
+
+
+ // WHEN AN ITEM QTY CHANGES
+ // CHANGE EVENT IS NOT CURRENTLY SUPPORTED BY LIVE METHOD
+ // STILL WORKS IN MOST BROWSERS, BUT NOT INTERNET EXPLORER
+ // INSTEAD WE SIMULATE THE CHANGE EVENT USING KEYUP AND SET A DELAY
BEFORE UPDATING THE CART
+ $('#jcart input[type="text"]').live('keyup', function(){
+
+ // GET ITEM ID FROM THE ITEM QTY INPUT ID VALUE, FORMATTED AS
jcart-item-id-n
+ var updateId = $(this).attr('id');
+ updateId = updateId.split('-');
+
+ // THE ID OF THE ITEM TO UPDATE
+ updateId = updateId[3];
+
+ // GET THE NEW QTY
+ var updateQty = $(this).val();
+
+ // AS LONG AS THE VISITOR HAS ENTERED A QTY
+ if (updateQty !== '')
+ {
+ // UPDATE THE CART ONE SECOND AFTER KEYUP
+ var updateDelay = setTimeout(function(){
+
+ // SEND ITEM INFO VIA POST TO INTERMEDIATE SCRIPT WHICH CALLS
jcart.php AND RETURNS UPDATED CART HTML
+ $.post('<?php echo $jcart['path'];?>jcart-relay.php', { "item_id":
updateId, "item_qty": updateQty, "jcart_update_item": '<?php echo
$jcart['text']['update_button'];?>', "jcart_is_checkout":
isCheckout, "jcart_token": ""}, function(data) {
+
+ // REPLACE EXISTING CART HTML WITH UPDATED CART HTML
+ $('#jcart').html(data);
+ $('.jcart-hide').remove();
+ });
+
+ }, 1000);
+ }
+
+ // IF THE VISITOR PRESSES ANOTHER KEY BEFORE THE TIMER HAS EXPIRED,
CLEAR THE TIMER
+ // THE NEW KEYDOWN RESULTS IN A NEW KEYUP, TRIGGERING THE KEYUP FUNCTION
AGAIN AND RESETTING THE TIMER
+ // REPEATS UNTIL THE USER DOES NOT PRESS A KEY BEFORE THE TIMER EXPIRES
IN WHICH CASE THE AJAX POST IS EXECUTED
+ // THIS PREVENTS THE CART FROM BEING UPDATED ON EVERY KEYSTROKE
+ $(this).keydown(function(){
+ window.clearTimeout(updateDelay);
+ });
+ });
+
+
+ // END THE DOCUMENT READY FUNCTION
+ });
=======================================
--- /dev/null
+++ /svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/jcart-relay.php Sat Dec
4 18:11:19 2010
@@ -0,0 +1,21 @@
+<?php
+
+// JCART v1.2
+// http://conceptlogic.com/jcart/
+
+// THIS FILE TAKES INPUT FROM AJAX REQUESTS VIA JQUERY post AND get
METHODS, THEN PASSES DATA TO JCART
+// RETURNS UPDATED CART HTML BACK TO SUBMITTING PAGE
+
+// INCLUDE JCART BEFORE SESSION START
+include_once 'jcart.php';
+
+// START SESSION
+session_start();
+
+// INITIALIZE JCART AFTER SESSION START
+$cart =& $_SESSION['jcart']; if(!is_object($cart)) $cart = new jcart();
+
+// PROCESS INPUT AND RETURN UPDATED CART HTML
+$cart->display_cart($jcart);
+
+?>
=======================================
--- /dev/null
+++ /svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/jcart.css Sat Dec 4
18:11:19 2010
@@ -0,0 +1,40 @@
+/*
+JCART v1.2
+http://conceptlogic.com/jcart/
+*/
+
+#jcart * { margin:0; padding:0; font-family:arial, tahoma, verdana,
sans-serif; }
+#jcart, #jcart input, #jcart-tooltip { font-size:12px; }
+
+#jcart fieldset { border:0; }
+
+#jcart table { width:100%; border:0; background:#fff;
border-collapse:collapse; }
+#jcart tr { }
+#jcart th, #jcart td { padding:5px; border:0; border:solid 1px #ccc;
vertical-align:top; text-align:left; font-weight:normal; }
+#jcart td.empty { text-align:center; }
+
+#jcart p.jcart-error { text-align:center; padding:5px; }
+
+#jcart strong#jcart-title { }
+
+#jcart th { background:#ccffcc }
+#jcart th#header { }
+#jcart th#footer { }
+
+#jcart td.jcart-item-qty { width:25%; }
+#jcart td.jcart-item-name { width:50%; font-weight:bold; }
+#jcart td.jcart-item-price { width:25%; font-weight:bold;
text-align:right; }
+#jcart td.jcart-item-price span { display:block; }
+
+#jcart a.jcart-remove { font-size:11px; font-weight:normal; }
+
+#jcart span#jcart-subtotal { display:block; }
+#jcart span#jcart-subtotal strong { }
+
+#jcart input.jcart-button { padding:2px; margin:2px;}
+
+#jcart input#jcart-checkout { float:right; }
+
+#jcart input#jcart-paypal-checkout { display:block; padding:10px;
margin:20px auto; }
+
+#jcart-tooltip { border:solid 1px #000; padding:3px 7px 3px 25px;
background:url(checkmark.png) 3px center no-repeat #f2fcee; }
=======================================
--- /dev/null
+++ /svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/jcart.php Sat Dec 4
18:11:19 2010
@@ -0,0 +1,489 @@
+<?php
+
+// JCART v1.2
+// http://conceptlogic.com/jcart/
+
+// SESSION BASED SHOPPING CART CLASS FOR JCART
+
+/**********************************************************************
+Based on Webforce Cart v.1.5
+(c) 2004-2005 Webforce Ltd, NZ
+http://www.webforce.co.nz/cart/
+**********************************************************************/
+
+// USER CONFIG
+include_once('jcart-config.php');
+
+// DEFAULT CONFIG VALUES
+include_once('jcart-defaults.php');
+
+
+// ENABLE REQUEST_URI FOR NON-APACHE ENVIRONMENTS
+// SEE: http://api.drupal.org/api/function/request_uri/7
+function request_uri() {
+ if (isset($_SERVER['REQUEST_URI'])) {
+ $uri = $_SERVER['REQUEST_URI'];
+ }
+ else {
+ if (isset($_SERVER['argv'])) {
+ $uri = $_SERVER['SCRIPT_NAME'] . '?' . $_SERVER['argv'][0];
+ }
+ elseif (isset($_SERVER['QUERY_STRING'])) {
+ $uri = $_SERVER['SCRIPT_NAME'] . '?' . $_SERVER['QUERY_STRING'];
+ }
+ else {
+ $uri = $_SERVER['SCRIPT_NAME'];
+ }
+ }
+ $uri = '/' . ltrim($uri, '/');
+ return $uri;
+}
+
+
+// JCART
+class jcart {
+ var $total = 0;
+ var $itemcount = 0;
+ var $items = array();
+ var $itemprices = array();
+ var $itemqtys = array();
+ var $itemname = array();
+
+ // CONSTRUCTOR FUNCTION
+ function cart() {}
+
+ // GET CART CONTENTS
+ function get_contents()
+ {
+ $items = array();
+ foreach($this->items as $tmp_item)
+ {
+ $item = FALSE;
+
+ $item['id'] = $tmp_item;
+ $item['qty'] = $this->itemqtys[$tmp_item];
+ $item['price'] = $this->itemprices[$tmp_item];
+ $item['name'] = $this->itemname[$tmp_item];
+ $item['subtotal'] = $item['qty'] * $item['price'];
+ $items[] = $item;
+ }
+ return $items;
+ }
+
+
+ // ADD AN ITEM
+ function add_item($item_id, $item_qty=1, $item_price, $item_name)
+ {
+ // VALIDATION
+ $valid_item_qty = $valid_item_price = false;
+
+ // IF THE ITEM QTY IS AN INTEGER, OR ZERO
+ if (preg_match("/^[0-9-]+$/i", $item_qty))
+ {
+ $valid_item_qty = true;
+ }
+ // IF THE ITEM PRICE IS A FLOATING POINT NUMBER
+ if (is_numeric($item_price))
+ {
+ $valid_item_price = true;
+ }
+
+ // ADD THE ITEM
+ if ($valid_item_qty !== false && $valid_item_price !== false)
+ {
+ // IF THE ITEM IS ALREADY IN THE CART, INCREASE THE QTY
+ if($this->itemqtys[$item_id] > 0)
+ {
+ $this->itemqtys[$item_id] = $item_qty + $this->itemqtys[$item_id];
+ $this->_update_total();
+ }
+ // THIS IS A NEW ITEM
+ else
+ {
+ $this->items[] = $item_id;
+ $this->itemqtys[$item_id] = $item_qty;
+ $this->itemprices[$item_id] = $item_price;
+ $this->itemname[$item_id] = $item_name;
+ }
+ $this->_update_total();
+ return true;
+ }
+
+ else if ($valid_item_qty !== true)
+ {
+ $error_type = 'qty';
+ return $error_type;
+ }
+ else if ($valid_item_price !== true)
+ {
+ $error_type = 'price';
+ return $error_type;
+ }
+ }
+
+
+ // UPDATE AN ITEM
+ function update_item($item_id, $item_qty)
+ {
+ // IF THE ITEM QTY IS AN INTEGER, OR ZERO
+ // UPDATE THE ITEM
+ if (preg_match("/^[0-9-]+$/i", $item_qty))
+ {
+ if($item_qty < 1)
+ {
+ $this->del_item($item_id);
+ }
+ else
+ {
+ $this->itemqtys[$item_id] = $item_qty;
+ }
+ $this->_update_total();
+ return true;
+ }
+ }
+
+
+ // UPDATE THE ENTIRE CART
+ // VISITOR MAY CHANGE MULTIPLE FIELDS BEFORE CLICKING UPDATE
+ // ONLY USED WHEN JAVASCRIPT IS DISABLED
+ // WHEN JAVASCRIPT IS ENABLED, THE CART IS UPDATED ONKEYUP
+ function update_cart()
+ {
+ // POST VALUE IS AN ARRAY OF ALL ITEM IDs IN THE CART
+ if (is_array($_POST['jcart_item_ids']))
+ {
+ // TREAT VALUES AS A STRING FOR VALIDATION
+ $item_ids = implode($_POST['jcart_item_ids']);
+ }
+
+ // POST VALUE IS AN ARRAY OF ALL ITEM QUANTITIES IN THE CART
+ if (is_array($_POST['jcart_item_qty']))
+ {
+ // TREAT VALUES AS A STRING FOR VALIDATION
+ $item_qtys = implode($_POST['jcart_item_qty']);
+ }
+
+ // IF NO ITEM IDs, THE CART IS EMPTY
+ if ($_POST['jcart_item_id'])
+ {
+ // IF THE ITEM QTY IS AN INTEGER, OR ZERO, OR EMPTY
+ // UPDATE THE ITEM
+ if (preg_match("/^[0-9-]+$/i", $item_qtys) || $item_qtys == '')
+ {
+ // THE INDEX OF THE ITEM AND ITS QUANTITY IN THEIR RESPECTIVE ARRAYS
+ $count = 0;
+
+ // FOR EACH ITEM IN THE CART
+ foreach ($_POST['jcart_item_id'] as $item_id)
+ {
+ // GET THE ITEM QTY AND DOUBLE-CHECK THAT THE VALUE IS AN INTEGER
+ $update_item_qty = intval($_POST['jcart_item_qty'][$count]);
+
+ if($update_item_qty < 1)
+ {
+ $this->del_item($item_id);
+ }
+ else
+ {
+ // UPDATE THE ITEM
+ $this->update_item($item_id, $update_item_qty);
+ }
+
+ // INCREMENT INDEX FOR THE NEXT ITEM
+ $count++;
+ }
+ return true;
+ }
+ }
+ // IF NO ITEMS IN THE CART, RETURN TRUE TO PREVENT UNNECSSARY ERROR
MESSAGE
+ else if (!$_POST['jcart_item_id'])
+ {
+ return true;
+ }
+ }
+
+
+ // REMOVE AN ITEM
+ /*
+ GET VAR COMES FROM A LINK, WITH THE ITEM ID TO BE REMOVED IN ITS QUERY
STRING
+ AFTER AN ITEM IS REMOVED ITS ID STAYS SET IN THE QUERY STRING, PREVENTING
THE SAME ITEM FROM BEING ADDED BACK TO THE CART
+ SO WE CHECK TO MAKE SURE ONLY THE GET VAR IS SET, AND NOT THE POST VARS
+
+ USING POST VARS TO REMOVE ITEMS DOESN'T WORK BECAUSE WE HAVE TO PASS THE
ID OF THE ITEM TO BE REMOVED AS THE VALUE OF THE BUTTON
+ IF USING AN INPUT WITH TYPE SUBMIT, ALL BROWSERS DISPLAY THE ITEM ID,
INSTEAD OF ALLOWING FOR USER FRIENDLY TEXT SUCH AS 'remove'
+ IF USING AN INPUT WITH TYPE IMAGE, INTERNET EXPLORER DOES NOT SUBMIT THE
VALUE, ONLY X AND Y COORDINATES WHERE BUTTON WAS CLICKED
+ CAN'T USE A HIDDEN INPUT EITHER SINCE THE CART FORM HAS TO ENCOMPASS ALL
ITEMS TO RECALCULATE TOTAL WHEN A QUANTITY IS CHANGED, WHICH MEANS THERE
ARE MULTIPLE REMOVE BUTTONS AND NO WAY TO ASSOCIATE THEM WITH THE CORRECT
HIDDEN INPUT
+ */
+ function del_item($item_id)
+ {
+ $ti = array();
+ $this->itemqtys[$item_id] = 0;
+ foreach($this->items as $item)
+ {
+ if($item != $item_id)
+ {
+ $ti[] = $item;
+ }
+ }
+ $this->items = $ti;
+ $this->_update_total();
+ }
+
+
+ // EMPTY THE CART
+ function empty_cart()
+ {
+ $this->total = 0;
+ $this->itemcount = 0;
+ $this->items = array();
+ $this->itemprices = array();
+ $this->itemqtys = array();
+ $this->itemname = array();
+ }
+
+
+ // INTERNAL FUNCTION TO RECALCULATE TOTAL
+ function _update_total()
+ {
+ $this->itemcount = 0;
+ $this->total = 0;
+ if(sizeof($this->items > 0))
+ {
+ foreach($this->items as $item)
+ {
+ $this->total = $this->total + ($this->itemprices[$item] *
$this->itemqtys[$item]);
+
+ // TOTAL ITEMS IN CART (ORIGINAL wfCart COUNTED TOTAL NUMBER OF LINE
ITEMS)
+ $this->itemcount += $this->itemqtys[$item];
+ }
+ }
+ }
+
+
+ // PROCESS AND DISPLAY CART
+ function display_cart($jcart)
+ {
+ // JCART ARRAY HOLDS USER CONFIG SETTINGS
+ extract($jcart);
+
+ // ASSIGN USER CONFIG VALUES AS POST VAR LITERAL INDICES
+ // INDICES ARE THE HTML NAME ATTRIBUTES FROM THE USERS ADD-TO-CART FORM
+ $item_id = $_POST[$item_id];
+ $item_qty = $_POST[$item_qty];
+ $item_price = $_POST[$item_price];
+ $item_name = $_POST[$item_name];
+ $jcart_token = $_POST['jcart_token'];
+
+ $_SESSION['jcart_token'] = strrev(md5(session_id() .
$_SERVER['HTTP_USER_AGENT']));
+
+ if ($csrf_token === true && $_POST && $jcart_token !=
$_SESSION['jcart_token']) {
+ $error_message = 'Invalid token!';
+ }
+ else {
+ // SANITIZE ITEM ID
+ $item_id = filter_var($item_id, FILTER_SANITIZE_STRING,
FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW);
+
+ // SANITIZE ITEM NAME
+ $item_name = filter_var($item_name, FILTER_SANITIZE_STRING,
FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW);
+
+ // ADD AN ITEM
+ if ($_POST[$item_add])
+ {
+ $item_added = $this->add_item($item_id, $item_qty, $item_price,
$item_name);
+ // IF NOT TRUE THE ADD ITEM FUNCTION RETURNS THE ERROR TYPE
+ if ($item_added !== true)
+ {
+ $error_type = $item_added;
+ switch($error_type)
+ {
+ case 'qty':
+ $error_message = $text['quantity_error'];
+ break;
+ case 'price':
+ $error_message = $text['price_error'];
+ break;
+ }
+ }
+ }
+
+ // UPDATE A SINGLE ITEM
+ // CHECKING POST VALUE AGAINST $text ARRAY FAILS?? HAVE TO CHECK
AGAINST $jcart ARRAY
+ if ($_POST['jcart_update_item'] == $jcart['text']['update_button'])
+ {
+ $item_updated = $this->update_item($_POST['item_id'],
$_POST['item_qty']);
+ if ($item_updated !== true)
+ {
+ $error_message = $text['quantity_error'];
+ }
+ }
+
+ // UPDATE ALL ITEMS IN THE CART
+ if($_POST['jcart_update_cart'] || $_POST['jcart_checkout'])
+ {
+ $cart_updated = $this->update_cart();
+ if ($cart_updated !== true)
+ {
+ $error_message = $text['quantity_error'];
+ }
+ }
+
+ // REMOVE AN ITEM
+ if($_GET['jcart_remove'] && !$_POST[$item_add]
&& !$_POST['jcart_update_cart'] && !$_POST['jcart_check_out'])
+ {
+ $this->del_item($_GET['jcart_remove']);
+ }
+
+ // EMPTY THE CART
+ if($_POST['jcart_empty'])
+ {
+ $this->empty_cart();
+ }
+ }
+
+
+
+
+ // DETERMINE WHICH TEXT TO USE FOR THE NUMBER OF ITEMS IN THE CART
+ if ($this->itemcount >= 0)
+ {
+ $text['items_in_cart'] = $text['multiple_items'];
+ }
+ if ($this->itemcount == 1)
+ {
+ $text['items_in_cart'] = $text['single_item'];
+ }
+
+ // DETERMINE IF THIS IS THE CHECKOUT PAGE
+ // WE FIRST CHECK THE REQUEST URI AGAINST THE USER CONFIG CHECKOUT (SET
WHEN THE VISITOR FIRST CLICKS CHECKOUT)
+ // WE ALSO CHECK FOR THE REQUEST VAR SENT FROM HIDDEN INPUT SENT BY AJAX
REQUEST (SET WHEN VISITOR HAS JAVASCRIPT ENABLED AND UPDATES AN ITEM QTY)
+ $is_checkout = strpos(request_uri(), $form_action);
+ if ($is_checkout !== false || $_REQUEST['jcart_is_checkout'] == 'true')
+ {
+ $is_checkout = true;
+ }
+ else
+ {
+ $is_checkout = false;
+ }
+
+ // OVERWRITE THE CONFIG FORM ACTION TO POST TO jcart-gateway.php INSTEAD
OF POSTING BACK TO CHECKOUT PAGE
+ // THIS ALSO ALLOWS US TO VALIDATE PRICES BEFORE SENDING CART CONTENTS
TO PAYPAL
+ if ($is_checkout == true)
+ {
+ $form_action = $path . 'jcart-gateway.php';
+ }
+
+ // DEFAULT INPUT TYPE
+ // CAN BE OVERRIDDEN IF USER SETS PATHS FOR BUTTON IMAGES
+ $input_type = 'submit';
+
+ // IF THIS ERROR IS TRUE THE VISITOR UPDATED THE CART FROM THE CHECKOUT
PAGE USING AN INVALID PRICE FORMAT
+ // PASSED AS A SESSION VAR SINCE THE CHECKOUT PAGE USES A HEADER REDIRECT
+ // IF PASSED VIA GET THE QUERY STRING STAYS SET EVEN AFTER SUBSEQUENT
POST REQUESTS
+ if ($_SESSION['quantity_error'] == true)
+ {
+ $error_message = $text['quantity_error'];
+ unset($_SESSION['quantity_error']);
+ }
+
+ // OUTPUT THE CART
+
+ // IF THERE'S AN ERROR MESSAGE WRAP IT IN SOME HTML
+ if ($error_message)
+ {
+ $error_message = "<p class='jcart-error'>$error_message</p>";
+ }
+
+ // DISPLAY THE CART HEADER
+ echo "<!-- BEGIN JCART -->\n<div id='jcart'>\n";
+ echo "\t$error_message\n";
+ echo "\t<form method='post' action='$form_action'>\n";
+ echo "\t\t<fieldset>\n";
+ echo "\t\t\t<input type='hidden' name='jcart_token' value='" .
$_SESSION['jcart_token'] . "' />\n";
+ echo "\t\t\t<table border='1'>\n";
+ echo "\t\t\t\t<tr>\n";
+ echo "\t\t\t\t\t<th id='jcart-header' colspan='3'>\n";
+ echo "\t\t\t\t\t\t<strong id='jcart-title'>" .
$text['cart_title'] . "</strong> (" . $this->itemcount . "&nbsp;" .
$text['items_in_cart'] .")\n";
+ echo "\t\t\t\t\t</th>\n";
+ echo "\t\t\t\t</tr>". "\n";
+
+ // IF ANY ITEMS IN THE CART
+ if($this->itemcount > 0)
+ {
+
+ // DISPLAY LINE ITEMS
+ foreach($this->get_contents() as $item)
+ {
+ echo "\t\t\t\t<tr>\n";
+
+ // ADD THE ITEM ID AS THE INPUT ID ATTRIBUTE
+ // THIS ALLOWS US TO ACCESS THE ITEM ID VIA JAVASCRIPT ON QTY CHANGE,
AND THEREFORE UPDATE THE CORRECT ITEM
+ // NOTE THAT THE ITEM ID IS ALSO PASSED AS A SEPARATE FIELD FOR
PROCESSING VIA PHP
+ echo "\t\t\t\t\t<td class='jcart-item-qty'>\n";
+ echo "\t\t\t\t\t\t<input type='text' size='2' id='jcart-item-id-" .
$item['id'] . "' name='jcart_item_qty[ ]' value='" . $item['qty'] . "'
/>\n";
+ echo "\t\t\t\t\t</td>\n";
+ echo "\t\t\t\t\t<td class='jcart-item-name'>\n";
+ echo "\t\t\t\t\t\t" . $item['name'] . "<input type='hidden'
name='jcart_item_name[ ]' value='" . $item['name'] . "' />\n";
+ echo "\t\t\t\t\t\t<input type='hidden' name='jcart_item_id[ ]'
value='" . $item['id'] . "' />\n";
+ echo "\t\t\t\t\t</td>\n";
+ echo "\t\t\t\t\t<td class='jcart-item-price'>\n";
+ echo "\t\t\t\t\t\t<span>" . $text['currency_symbol'] .
number_format($item['subtotal'],2) . "</span><input type='hidden'
name='jcart_item_price[ ]' value='" . $item['price'] . "' />\n";
+ echo "\t\t\t\t\t\t<a class='jcart-remove' href='?jcart_remove=" .
$item['id'] . "'>" . $text['remove_link'] . "</a>\n";
+ echo "\t\t\t\t\t</td>\n";
+ echo "\t\t\t\t</tr>\n";
+ }
+ }
+
+ // THE CART IS EMPTY
+ else
+ {
+ echo "\t\t\t\t<tr><td colspan='3' class='empty'>" .
$text['empty_message'] . "</td></tr>\n";
+ }
+
+ // DISPLAY THE CART FOOTER
+ echo "\t\t\t\t<tr>\n";
+ echo "\t\t\t\t\t<th id='jcart-footer' colspan='3'>\n";
+
+ // IF THIS IS THE CHECKOUT HIDE THE CART CHECKOUT BUTTON
+ if ($is_checkout !== true)
+ {
+ if ($button['checkout']) { $input_type = 'image'; $src = ' src="' .
$button['checkout'] . '" alt="' . $text['checkout_button'] . '" title="" ';
}
+ echo "\t\t\t\t\t\t<input type='" . $input_type . "' " .
$src . "id='jcart-checkout' name='jcart_checkout' class='jcart-button'
value='" . $text['checkout_button'] . "' />\n";
+ }
+
+ echo "\t\t\t\t\t\t<span id='jcart-subtotal'>" . $text['subtotal'] . ":
<strong>" . $text['currency_symbol'] .
number_format($this->total,2) . "</strong></span>\n";
+ echo "\t\t\t\t\t</th>\n";
+ echo "\t\t\t\t</tr>\n";
+ echo "\t\t\t</table>\n\n";
+
+ echo "\t\t\t<div class='jcart-hide'>\n";
+ if ($button['update']) { $input_type = 'image'; $src = ' src="' .
$button['update'] . '" alt="' . $text['update_button'] . '" title="" '; }
+ echo "\t\t\t\t<input type='" . $input_type . "' " .
$src ."name='jcart_update_cart' value='" . $text['update_button'] . "'
class='jcart-button' />\n";
+ if ($button['empty']) { $input_type = 'image'; $src = ' src="' .
$button['empty'] . '" alt="' . $text['empty_button'] . '" title="" '; }
+ echo "\t\t\t\t<input type='" . $input_type . "' " .
$src ."name='jcart_empty' value='" . $text['empty_button'] . "'
class='jcart-button' />\n";
+ echo "\t\t\t</div>\n";
+
+ // IF THIS IS THE CHECKOUT DISPLAY THE PAYPAL CHECKOUT BUTTON
+ if ($is_checkout == true)
+ {
+ // HIDDEN INPUT ALLOWS US TO DETERMINE IF WE'RE ON THE CHECKOUT PAGE
+ // WE NORMALLY CHECK AGAINST REQUEST URI BUT AJAX UPDATE SETS VALUE TO
jcart-relay.php
+ echo "\t\t\t<input type='hidden' id='jcart-is-checkout'
name='jcart_is_checkout' value='true' />\n";
+
+ // PAYPAL CHECKOUT BUTTON
+ if ($button['paypal_checkout']) { $input_type = 'image'; $src = '
src="' . $button['paypal_checkout'] . '" alt="' .
$text['checkout_paypal_button'] . '" title="" '; }
+ echo "\t\t\t<input type='" . $input_type . "' " .
$src ."id='jcart-paypal-checkout' name='jcart_paypal_checkout' value='" .
$text['checkout_paypal_button'] . "'" . $disable_paypal_checkout . " />\n";
+ }
+ echo "\t\t</fieldset>\n";
+ echo "\t</form>\n";
+
+ // IF UPDATING AN ITEM, FOCUS ON ITS QTY INPUT AFTER THE CART IS LOADED
(DOESN'T SEEM TO WORK IN IE7)
+ if ($_POST['jcart_update_item'] && ctype_digit($_POST['item_id']))
+ {
+ echo "\t" . '<script
type="text/javascript">$(function(){$("#jcart-item-id-' .
$_POST['item_id'] . '").focus()});</script>' . "\n";
+ }
+
+ echo "</div>\n<!-- END JCART -->\n";
+ }
+ }
+?>
=======================================
--- /dev/null
+++ /svn/trunk/reamus/shoppingcart/jcart_1.2/jcart/jquery-1.3.2.min.js Sat
Dec 4 18:11:19 2010
@@ -0,0 +1,19 @@
+/*
+ * jQuery JavaScript Library v1.3.2
+ * http://jquery.com/
+ *
+ * Copyright (c) 2009 John Resig
+ * Dual licensed under the MIT and GPL licenses.
+ * http://docs.jquery.com/License
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+(function(){var
l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new
o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|
^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||
document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return
this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]|
|!H)){if(G[1]){E=o.clean([G[1]],H)}else{var
I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var
F=o(I||[]);F.context=document;F.selector=E;return F}}else{return
o(H).find(E)}}else{if(o.isFunction(E)){return
o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return
this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return
this.length},get:function(E){return
E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var
G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return
G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return
this},each:function(F,E){return o.each(this,F,E)},index:function(E){return
o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof
F==="string"){if(H===g){return this[0]&&o[G|
|"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in
E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"|
|E=="height")&&parseFloat(F)<0){F=g}return
this.attr(E,F,"curCSS")},text:function(F){if(typeof
F!=="object"&&F!=null){return
this.empty().append((this[0]&&this[0].ownerDocument||
document).createTextNode(F))}var E="";o.each(F||
this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return
E},wrapAll:function(E){if(this[0]){var
F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var
G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return
this},wrapInner:function(E){return
this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return
this.each(function(){o(this).wrapAll(E)})},append:function(){return
this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return
this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return
this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return
this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return
this.prevObject||
o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var
F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return
F}else{return this.pushStack(o.unique(o.map(this,function(G){return
o.find(E,G)})),"find",E)}},clone:function(G){var
E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var
I=this.outerHTML;if(!I){var
J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return
o.clean([I.replace(/ jQuery\d+="(?:\d+|
null)"/g,"").replace(/^\s*/,"")])[0]}else{return
this.cloneNode(true)}});if(G===true){var
H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var
I=o.data(H[F],"events");for(var K in I){for(var J in
I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return
E},filter:function(E){return
this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return
E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return
F.nodeType===1})),"filter",E)},closest:function(E){var
G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var
H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return
H}H=H.parentNode;F++}})},not:function(E){if(typeof
E==="string"){if(f.test(E)){return
this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var
F=E.length&&E[E.length-1]!==g&&!E.nodeType;return
this.filter(function(){return
F?o.inArray(this,E)<0:this!=E})},add:function(E){return
this.pushStack(o.unique(o.merge(this.get(),typeof
E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var
E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||
{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var
I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return
null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var
G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return
L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof
K==="number"){K+=""}return
this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|
checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||
o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var
N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0|
|
o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return
E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|
null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return
this.after(E).remove()},eq:function(E){return
this.slice(E,+E+1)},slice:function(){return
this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return
this.pushStack(o.map(this,function(G,F){return
E.call(G,F,G)}))},andSelf:function(){return
this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var
I=(this[0].ownerDocument||
this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||
this[0]),I),H=I.firstChild;if(H){for(var
G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||
G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function
K(N,O){return
M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]|
|
N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function
z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text|
|F.textContent||F.innerHTML|
|"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new
Date}o.extend=o.fn.extend=function(){var J=arguments[0]||
{},H=1,I=arguments.length,E=false,G;if(typeof
J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof
J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var
F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof
L==="object"&&!L.nodeType){J[F]=o.extend(E,K||
(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var
b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView|
|
{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return
o},isFunction:function(E){return s.call(E)==="[object
Function]"},isArray:function(E){return s.call(E)==="[object
Array]"},isXMLDoc:function(E){return
E.nodeType===9&&E.documentElement.nodeName!=="HTML"|
|!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var
F=document.getElementsByTagName("head")[0]||
document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return
F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var
E,H=0,I=G.length;if(F){if(I===g){for(E in
G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E
in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var
J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return
G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof
I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F|
|"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return
F&&o.inArray(E,(F.className||
F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in
G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in
G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var
L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function
I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))|
|0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||
0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||
0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return
Math.max(0,Math.round(L))}return
o.curCSS(H,F,J)},curCSS:function(I,F,G){var
L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return
L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var
M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var
J=F.replace(/\-(\w)/g,function(N,O){return
O.toUpperCase()});L=I.currentStyle[F]||
I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var
H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L|
|0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return
L},clean:function(F,K,I){K=K||document;if(typeof
K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||
document}if(!I&&F.length===1&&typeof F[0]==="string"){var
H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var
G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof
S==="number"){S+=""}if(!S){return}if(typeof
S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return
T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|
embed)$/i)?U:V+"></"+T+">"});var
O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var
Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]|
|!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|
tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]|
|!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||
(!O.indexOf("<td")|
|!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]|
|!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]|
|!o.support.htmlSerialize&&[1,"div<div>","</div>"]||
[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var
R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var
M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var
J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||
G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return
E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||
J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||
G;if(J.tagName){var F=/href|src|
style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G
in
J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type
property can't be
changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return
J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var
I=J.getAttributeNode("tabIndex");return
I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|
textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return
J[G]}if(!o.support.style&&H&&G=="style"){return
o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var
E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return
E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter|
|"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return
J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return
N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E|
|"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var
E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||
o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return
E},inArray:function(G,H){for(var
E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return
-1},merge:function(H,E){var
F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return
H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var
J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return
F},grep:function(F,J,E){var G=[];for(var
H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return
G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var
I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var
C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|
ra|ie)[\/: ]([\d.]+)/)||
[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|
webkit)/.test(C)};o.each({parent:function(E){return
E.parentNode},parents:function(E){return
o.dir(E,"parentNode")},next:function(E){return
o.nth(E,2,"nextSibling")},prev:function(E){return
o.nth(E,2,"previousSibling")},nextAll:function(E){return
o.dir(E,"nextSibling")},prevAll:function(E){return
o.dir(E,"previousSibling")},siblings:function(E){return
o.sibling(E.parentNode.firstChild,E)},children:function(E){return
o.sibling(E.firstChild)},contents:function(E){return
o.nodeName(E,"iframe")?E.contentDocument||
E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var
H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return
this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var
J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var
I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return
this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof
E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E|
|
o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return
this.each(F,arguments)}});function j(E,F){return
E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var
h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var
H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return
E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var
H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in
o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete
F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete
o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var
G=o.data(F,E);if(!G||
o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return
G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||
G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var
H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var
F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return
F===g&&H[1]?this.data(H[0]):F}else{return
this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return
this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof
E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return
this.each(function(){var
G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return
this.each(function(){o.dequeue(this,E)})}});
+/*
+ * Sizzle CSS Selector Engine - v0.9.3
+ * Copyright 2009, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|
['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|
[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var
F=function(Y,U,ab,ac){ab=ab||[];U=U||
document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof
Y!=="string"){return ab}var
Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var
ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var
ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax
error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object
Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var
aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||
ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var
aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var
aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return
ab};F.matches=function(T,U){return
F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var
W=0,V=I.order.length;W<V;W++){var
Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var
U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]|
|"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var
V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab
in I.filter){if((Y=I.match[ab].exec(ad))!=null){var
U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var
X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var
ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax
error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var
I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|
\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|
\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|
\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|
\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|
\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|
[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|
odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|
\\.)+)(?:\((['"]*)((?:\([^\)]+\)|
[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return
T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof
T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var
W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y|
|U&&U.nodeName===T?U||
false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof
U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var
V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var
W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var
V=0,T=Z.length;V<T;V++){var
Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var
V=L++,T=S;if(!U.match(/\W/)){var
X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var
V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var
X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof
V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return
T?[T]:[]}},NAME:function(V,Y,Z){if(typeof
Y.getElementsByName!=="undefined"){var
U=[],X=Y.getElementsByName(V[1]);for(var
W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return
U.length===0?null:U}},TAG:function(T,U){return
U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return
W}for(var
X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return
false},ID:function(T){return
T[1].replace(/\\/g,"")},TAG:function(U,T){for(var
V=0;T[V]===false;V++){}return
T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var
U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"|
|!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||
1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var
W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return
X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||
/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var
W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return
false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return
true}}return X},POS:function(T){T.unshift(true);return
T}},filters:{enabled:function(T){return
T.disabled===false&&T.type!=="hidden"},disabled:function(T){return
T.disabled===true},checked:function(T){return
T.checked===true},selected:function(T){T.parentNode.selectedIndex;return
T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type|
|T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|
textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return
T===0},last:function(V,U,T,W){return
U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return
T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return
U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return
T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var
U=V[1],X=I.filters[U];if(X){return
X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText|
|"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var
W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return
true}}}},CHILD:function(T,W){var
Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return
false}}if(Z=="first"){return
true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return
false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return
true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var
X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var
aa=T.nodeIndex-ac;if(V==0){return
aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return
U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)|
|U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||
U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var
V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return
T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|
="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var
T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var
M=I.match.POS;for(var O in
I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var
E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return
T}return
U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var
U=W||[];if(H.call(X)==="[object
Array]"){Array.prototype.push.apply(U,X)}else{if(typeof
X.length==="number"){for(var
V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var
V=0;X[V];V++){U.push(X[V])}}}return U}}var
G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var
V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return
V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var
V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return
V}}else{if(document.createRange){G=function(W,U){var
V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var
X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return
X}}}}(function(){var U=document.createElement("form"),V="script"+(new
Date).getTime();U.innerHTML="<input name='"+V+"'/>";var
T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof
Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return
W?W.id===X[1]||typeof
W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var
X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return
Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var
T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var
X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var
V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return
X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof
T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return
U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var
T=F,U=document.createElement("div");U.innerHTML="<p
class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X|
|document;if(!W&&X.nodeType===9&&!Q(X)){try{return
E(X.querySelectorAll(Y),V)}catch(Z){}}return
T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var
T=document.createElement("div");T.innerHTML="<div class='test e'></div><div
class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof
V.getElementsByClassName!=="undefined"&&!W){return
V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var
ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var
T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var
X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function
S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var
W=0,V=ad.length;W<V;W++){var
T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var
X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof
Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var
K=document.compareDocumentPosition?function(U,T){return
U.compareDocumentPosition(T)&16}:function(U,T){return
U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return
T.nodeType===9&&T.documentElement.nodeName!=="HTML"|
|!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var
W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var
Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return
F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return
T.offsetWidth===0||
T.offsetHeight===0};F.selectors.filters.visible=function(T){return
T.offsetWidth>0||
T.offsetHeight>0};F.selectors.filters.animated=function(T){return
o.grep(o.timers,function(U){return
T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return
F.matches(V,T)};o.dir=function(V,U){var
T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return
T};o.nth=function(X,T,V,W){T=T||1;var
U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return
X};o.sibling=function(V,U){var
T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return
T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||
I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var
G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||
o.data(I,"events",{}),J=o.data(I,"handle")||
o.data(I,"handle",function(){return typeof
o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var
O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var
L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]|
|
o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3|
|K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof
H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H|
|""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var
Q=O.split(".");O=Q.shift();var N=RegExp("(^|
\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete
G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete
G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F
in G[O]){break}if(!F){if(!o.event.special[O]||
o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete
G[O]}}})}for(F in G){break}if(!F){var
L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var
G=I.type||I;if(!E){I=typeof
I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H|
|H.nodeType==3||H.nodeType==8){return
g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var
J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||
(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var
F=H.parentNode||
H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var
J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var
L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var
I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|
$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||
I.test(H.type)){K.handler=H;K.data=H.data;var
F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey
attrChange attrName bubbles button cancelable charCode clientX clientY
ctrlKey currentTarget data detail eventPhase fromElement handler keyCode
metaKey newValue originalTarget pageX pageY prevValue relatedNode
relatedTarget screenX screenY shiftKey srcElement target toElement view
wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var
F=H;H=o.Event(F);for(var
G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement|
|
document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var
I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft|
|E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||
E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||
H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||
H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return
H},proxy:function(F,E){E=E||function(){return
F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return
E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var
E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||
{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return
new
o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function
k(){return false}function u(){return
true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var
E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var
E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var
a=function(F){var
E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return
F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||
G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||
H,function(I){o(this).unbind(I,E);return(F||
H).apply(this,arguments)});return
this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return
this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return
this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var
F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return
F.result}},toggle:function(G){var
E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return
this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||
0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||
false}))},hover:function(E,F){return
this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return
this},live:function(G,F){var
E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return
this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return
this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|
$)"),G=true,F=[];o.each(o.data(this,"events").live||
[],function(I,J){if(E.test(J.type)){var
K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return
o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return
G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/
/g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var
x=false;function
B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return
G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E
in
o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var
F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new
Date).getTime();K.style.display="none";K.innerHTML='
<link/><table></table><a href="/a"
style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var
H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H|
|!H.length|
|!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete
l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var
L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var
w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof
G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var
E=G.slice(I,G.length);G=G.slice(0,I)}var
H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof
J==="object"){J=o.param(J);H="POST"}}}var
F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"|
|
L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|
\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return
this},serialize:function(){return
o.param(this.serializeArray())},serializeArray:function(){return
this.map(function(){return
this.elements?o.makeArray(this.elements):this}).filter(function(){return
this.name&&!this.disabled&&(this.checked||/select|
textarea/i.test(this.nodeName)||/text|hidden|password|
search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return
G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return
this.bind(F,G)}});var
r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return
o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return
o.get(E,null,F,"script")},getJSON:function(E,F,G){return
o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return
o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return
l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new
XMLHttpRequest()},accepts:{xml:"application/xml,
text/xml",html:"text/html",script:"text/javascript,
application/javascript",json:"application/json,
text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var
W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof
M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp|
|"callback")+"=?"}}else{if(!M.data|
|!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp|
|"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)|
|
M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete
l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var
E=e();var U=M.url.replace(/(\?|&)_=.*?(&|
$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var
Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol|
|Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var
T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var
O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||
this.readyState=="loaded"||
this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return
g}var K=false;var
J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]|
|"Thu, 01 Jan 1970 00:00:00
GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+",
*/*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return
false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var
N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4|
|
X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var
Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var
P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function
I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function
L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return
J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"|
|(F.status>=200&&F.status<300)||F.status==304||
F.status==1223}catch(E){}return
false},httpNotModified:function(G,E){try{var
H=G.getResponseHeader("Last-Modified");return G.status==304||
H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var
F=J.getResponseHeader("content-type"),E=H=="xml"|
|!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof
I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return
I},param:function(E){var G=[];function
H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)|
|E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in
E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return
G.join("&").replace(/%20/g,"+")}});var
m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function
t(F,E){var
G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return
G}o.fn.extend({show:function(J,L){if(J){return
this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var
E=o.data(this[H],"olddisplay");this[H].style.display=E|
|"";if(o.css(this[H],"display")==="none"){var
G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+"
/>").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var
H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")|
|""}return this}},hide:function(H,I){if(H){return
this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var
E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var
G=0,F=this.length;G<F;G++){this[G].style.display="none"}return
this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof
G==="boolean";return
o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null|
|E?this.each(function(){var
H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return
this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var
E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var
K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M
in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return
K.complete.call(this)}if((M=="height"||
M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var
R=new o.fx(J,K,O);if(/toggle|show|
hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var
Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var
N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||
1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return
true})},stop:function(F,E){var
G=o.timers;if(F){this.queue([])}this.each(function(){for(var
H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return
this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return
this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof
G==="object"?G:{complete:F||!F&&H||
o.isFunction(G)&&G,duration:G,easing:F&&H||
H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof
E.duration==="number"?E.duration:o.fx.speeds[E.duration]||
o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return
E},easing:{linear:function(G,H,E,F){return
E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]|
|o.fx.step._default)(this);if((this.prop=="height"||
this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style|
|this.elem.style[this.prop]==null)){return this.elem[this.prop]}var
E=parseFloat(o.css(this.elem,this.prop,F));return
E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||
0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G|
|this.unit||"px";this.now=this.start;this.pos=this.state=0;var
E=this;function F(J){return
E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var
K=o.timers;for(var
J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"|
|
this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var
G=e();if(H||
G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var
E=true;for(var F in
this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide|
|this.options.show){for(var I in
this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return
false}else{var
J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing|
|
(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return
true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return
o.offset.bodyOffset(this[0])}var
G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop|
|F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||
o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||
o.boxModel&&E.scrollLeft||
F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return
o.offset.bodyOffset(this[0])}o.offset.initialized||
o.offset.initialize();var
J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|
d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||
0,I+=parseInt(M.borderLeftWidth,10)||
0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)|
|0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||
E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var
L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div
style="position:absolute;top:0;left:0;margin:0;border:5px solid
#000;padding:0;width:1px;height:1px;"><div></div></div><table
style="position:absolute;top:0;left:0;margin:0;border:5px solid
#000;padding:0;width:1px;height:1px;" cellpadding="0"
cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E
in
M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized|
|o.offset.initialize();var
G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)|
|0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||
0}return{top:G,left:F}}};o.fn.extend({position:function(){var
I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|
html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return
F},offsetParent:function(){var E=this[0].offsetParent||
document.body;while(E&&(!/^body|
html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return
o(E)}});o.each(["Left","Top"],function(F,E){var
G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return
H!==g?this.each(function(){this==l||
this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l|
|this[0]==document?self[F?"pageYOffset":"pageXOffset"]||
o.boxModel&&document.documentElement[G]||
document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var
E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return
this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return
this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var
J=G.toLowerCase();o.fn[J]=function(K){return
this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]|
|
document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof
K==="string"?K:K+"px")}})})();
=======================================
--- /dev/null
+++ /svn/trunk/reamus/shoppingcart/jcart_1.2/store.php Sat Dec 4 18:11:19
2010
@@ -0,0 +1,122 @@
+<?php
+
+// INCLUDE JCART BEFORE SESSION START
+include 'jcart/jcart.php';
+
+// START SESSION
+session_start();
+
+// INITIALIZE JCART AFTER SESSION START
+$cart =& $_SESSION['jcart']; if(!is_object($cart)) $cart = new jcart();
+
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+
+ <title>jCart - Free Ajax/PHP shopping cart</title>
+
+ <style type="text/css">
+ * { margin:0; padding:0; }
+
+ html { background:#fff; font-family:trebuchet ms, candara, sans-serif;
font-size:62.5%; }
+ body { font-size:1.5em; }
+
+ #wrapper { margin:30px auto 250px auto; width:890px; border:solid 1px
#ccc; padding:30px; background:#efefef; }
+
+ h2 { margin-bottom:1em; }
+
+ #sidebar { width:35%; float:right; }
+
+ #content { width:60%; }
+
+ .jcart { margin:0 20px 20px 0; padding-top:20px; border:dashed 2px
#66cc66; float:left; background:#fff; text-align:center; }
+ .jcart ul { margin:0; list-style:none; padding:0 20px; text-align:left;
}
+ .jcart fieldset { border:0; }
+ .jcart strong { color:#000066; }
+ .jcart .button { margin:20px; padding:5px; }
+
+ fieldset { border:0; }
+ #paypal-button { display:block; padding:10px; margin:20px auto; }
+
+ .clear { clear:both; }
+ </style>
+
+ <link rel="stylesheet" type="text/css" media="screen, projection"
href="jcart/jcart.css" />
+
+ </head>
+ <body>
+ <div id="wrapper">
+ <h2>Demo Store</h2>
+
+ <div id="sidebar">
+ <?php $cart->display_cart($jcart);?>
+ </div>
+
+ <div id="content">
+
+ <form method="post" action="" class="jcart">
+ <fieldset>
+ <input type="hidden" name="my-item-id" value="1" />
+ <input type="hidden" name="my-item-name" value="Soccer Ball" />
+ <input type="hidden" name="my-item-price" value="25.00" />
+
+ <ul>
+ <li><strong>Soccer Ball</strong></li>
+ <li>Price: $25.00</li>
+ <li>
+ <label>Qty: <input type="text" name="my-item-qty" value="1"
size="3" /></label>
+ </li>
+ </ul>
+
+ <input type="submit" name="my-add-button" value="add to cart"
class="button" />
+ </fieldset>
+ </form>
+
+ <form method="post" action="" class="jcart">
+ <fieldset>
+ <input type="hidden" name="my-item-id" value="2" />
+ <input type="hidden" name="my-item-name" value="Baseball Mitt" />
+ <input type="hidden" name="my-item-price" value="19.50" />
+
+ <ul>
+ <li><strong>Baseball Mitt</strong></li>
+ <li>Price: $19.50</li>
+ <li>
+ <label>Qty: <input type="text" name="my-item-qty" value="1"
size="3" /></label>
+ </li>
+ </ul>
+
+ <input type="submit" name="my-add-button" value="add to cart"
class="button" />
+ </fieldset>
+ </form>
+
+ <form method="post" action="" class="jcart">
+ <fieldset>
+ <input type="hidden" name="my-item-id" value="3" />
+ <input type="hidden" name="my-item-name" value="Hockey Stick" />
+ <input type="hidden" name="my-item-price" value="33.25" />
+
+ <ul>
+ <li><strong>Hockey Stick</strong></li>
+ <li>Price: $33.25</li>
+ <li>
+ <label>Qty: <input type="text" name="my-item-qty" value="1"
size="3" /></label>
+ </li>
+ </ul>
+
+ <input type="submit" name="my-add-button" value="add to cart"
class="button" />
+ </fieldset>
+ </form>
+
+ <div class="clear"></div>
+ </div>
+ </div>
+
+ <script type="text/javascript" src="jcart/jquery-1.3.2.min.js"></script>
+ <script type="text/javascript"
src="jcart/jcart-javascript.min.php"></script>
+ </body>
+</html>
=======================================
--- /dev/null
+++ /svn/trunk/reamus/shoppingcart/view_cart.php Sat Dec 4 18:11:19 2010
@@ -0,0 +1,30 @@
+<?php
+
+// INCLUDE JCART BEFORE SESSION START
+include "jcart/jcart.php";
+
+// START SESSION
+session_start();
+
+// INITIALIZE JCART AFTER SESSION START
+$cart =& $_SESSION["jcart"]; if(!is_object($cart)) $cart = new jcart();
+
+?>
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+
+ <title>jCart - Free Ajax/PHP shopping cart</title>
+
+ <link rel="stylesheet" type="text/css" media="screen, projection"
href="style.css" />
+
+ <link rel="stylesheet" type="text/css" media="screen, projection"
href="jcart/jcart.css" />
+
+ <script type="text/javascript"
src="jcart/jquery-1.3.2.min.js"></script>
+
+ <script type="text/javascript"
src="jcart/jcart-javascript.min.php"></script>
+ <body>
+ </body>
+</head>
+</html>
Reply all
Reply to author
Forward
0 new messages