There were some problems with what you entered on PayPal:
"
+<% @order.errors.full_messages.each do |msg| %>
+x += "
<%= msg %>
";
+<% end %>
+x += "
";
+$("#order-processing").html(x);
+<% elsif @order.declined? %>
+window.location.replace("../orders/failure");
+<% else %>
+window.location.replace("../orders/success");
+<% end %>
\ No newline at end of file
diff --git a/app/views/orders/failure.html.haml b/app/views/orders/failure.html.haml
new file mode 100644
index 0000000..a55b357
--- /dev/null
+++ b/app/views/orders/failure.html.haml
@@ -0,0 +1,8 @@
+#order-failure
+ %h2.were-sorry We're sorry
+ %p Error code: #{@msg}
+ - if @order.paypal?
+ %p PayPal has declined the transaction. Perhaps your PayPal account balance is too low, or your PayPal credit card is not verified.
+ - else
+ %p Our credit card processor has declined the transaction. Perhaps the billing address you provided does not match that of the cardholder's, or the CVV may be incorrect.
+ %p Please #{link_to "try again", root_path} with a different payment method and contact #{mail_to "support@firstbargain.com", "customer support", :subject => "Billing Help"} if you continue to have problems.
\ No newline at end of file
diff --git a/app/views/orders/index.html.haml b/app/views/orders/index.html.haml
new file mode 100644
index 0000000..cd09333
--- /dev/null
+++ b/app/views/orders/index.html.haml
@@ -0,0 +1,54 @@
+.block-first
+ %h2.your-order-history Your order history
+ #order-history-icon-legend
+ #account-order-history
+ %table.order-history-hidden
+ %tr
+ %th.date Purchased Date
+ %th.items Product Description
+ %th.price Total Price
+ %th.status Status
+ - @orders.each do |o|
+ %tr{:class => o.state}
+ %td.date= (o.created_at.to_s :order_history).html_safe
+ %td.items{:class => order_class(o)}
+ = link_to_order o
+ %span.order-id Order ID: #{ o.id }
+ %td.price= number_to_currency o.total_price
+ %td.status= o.state
+ #show-void-declined
+ Show Void & Declined Orders
+.block-last
+ #order-history-key
+ %h3 What are all the steps in the order process?
+ %dl
+ %dt Complete
+ %dd We have successfully charged your Credit Card or PayPal account. Your bid pack should be credited to your account immediately.
+ %dt Paid
+ %dd We have successfully charged your Credit Card or PayPal account. Your order will be processed for shipping.
+ %dt Shipped
+ %dd Your order has left our warehouses and is on its way to you.
+ %dt.hold Processing
+ %dd We are reviewing this order.
+ %dt.hold Refunded
+ %dd Your order has been canceled. Please allow 1 to 2 weeks for the refund to appear on your bank statement.
+ %dt.error On Hold
+ %dd Your order is undergoing some changes.
+ %dt.error Declined
+ %dd We were unable to charge your Credit Card or PayPal account. If any order is declined, please try again after a few minutes. If you are still having problems, please #{ link_to "contact us", contact_path }.
+- if session[:bidpopup] then
+ - session.delete :bidpopup
+ #new-bidder-popup
+ .overlay-popup-toggle= image_tag "msc/close-icon.gif", size: "16x16"
+ .left= image_tag "msc/glasses-book.jpg"
+ %p.welcome Welcome to FirstBargain!
+ %p Here's a few things you need to know to get started:
+ %ul
+ %li Each time you bid, one bid will be deducted from your bids account.
+ %li Also, each time a bid is placed, a maximum of 30 seconds will be added to the clock. This allows time for other bidders to decide if they want to keep bidding or not. Think of an auction, going once... going twice...
+ %li If you are the last bidder when the clock runs out, you are the winner! Once you have won, you will purchase the product for the ending price of the auction.
+ %li If you do not win, you will lose the bids you have placed, however, you can use our "Buy Now" option to purchase the item at retail value, and the cash value of the bids you have placed will be discounted from your total ("Buy Now" is available on most products)
+ %li
+ %p.right= link_to "Start Bidding!", auctions_path, :class => "button"
+ We recommend visiting our #{ link_to "tutorial page", tutorial_path } to familiarize yourself with our bidding process before you place your first bid.
+
diff --git a/app/views/orders/new.html.haml b/app/views/orders/new.html.haml
new file mode 100644
index 0000000..f535701
--- /dev/null
+++ b/app/views/orders/new.html.haml
@@ -0,0 +1,20 @@
+#new-order.orders-page
+ %h2.my-shopping-cart My Shopping Cart
+ .clearfix
+ = form_for @order, :as => :order, :url => confirm_orders_path(:secure => true), :html => {:class => "address-form"} do |f|
+ - if @order.errors.any?
+ #errorExplanation
+ %p Oops, please correct the following items to proceed:
+ %ul
+ - @order.errors.full_messages.each do |msg|
+ %li= msg
+ .left-column-4
+ #product-shipping
+ = render 'cart'
+ #us-shipping-only= image_tag ("msc/us-flag.gif")
+ .right-column-4
+ #checkout-payments
+ = f.hidden_field :kind, :value => kind(@order)
+ = f.hidden_field :buyable, :value => buyable(@order)
+ = f.hidden_field :gateway, :value => "authorize"
+ = render :partial => 'payment_fields', :locals => {:f => f}
\ No newline at end of file
diff --git a/app/views/orders/paypal.html.haml b/app/views/orders/paypal.html.haml
new file mode 100644
index 0000000..23a2140
--- /dev/null
+++ b/app/views/orders/paypal.html.haml
@@ -0,0 +1,35 @@
+#confirm-order.orders-page.clearfix
+ %h2.confirm-your-order Confirm Your Order
+ .left-column-1
+ = render 'cart'
+ .right-column-1
+ #billing-address.wrapper
+ %h3 Billing Address
+ %address
+ %em Billing info. confirmed by PayPal
+ #shipping-address.wrapper
+ %h3 Shipping Address
+ %address
+ - if @order.requires_shipping?
+ #{@order.shipping_name}
+ %br
+ #{@order.shipping_address}
+ - if @order.shipping_address_2?
+ %br
+ #{@order.shipping_address_2}
+ %br
+ #{@order.shipping_city}, #{@order.shipping_state}, #{@order.shipping_zip}
+ %br
+ #{@order.shipping_phone}
+ - else
+ No shipping is required for your purchase.
+ #paypal
+ %h3 Payment Type
+ %p PayPal
+ #place-order
+ %p.tos-agreement By placing your order, you agree to FirstBargain.com's #{link_to "Privacy Policy", privacy_path} and #{link_to "Terms of Service", tos_path}.
+ = form_for @order, :url => orders_path(:secure => true), :remote => true do |f|
+ %p.actions= f.submit "Order Now", :class => "button", :disable_with => "Processing..."
+ #order-processing{:style => "display: none"}
+ %p Your order is being processed. You will be redirected soon.
+ = image_tag 'msc/ajax-loader.gif'
\ No newline at end of file
diff --git a/app/views/orders/success.html.haml b/app/views/orders/success.html.haml
new file mode 100644
index 0000000..3bdbe24
--- /dev/null
+++ b/app/views/orders/success.html.haml
@@ -0,0 +1,53 @@
+#order-success
+ %h2.thank-you Thank You
+ %h3 Your order was successfully processed.
+ %p We're redirecting you to the "Order History" page in 5 second(s).
+ %p If you are having difficulties getting there, #{link_to "please click here", orders_path}.
+
+/ ADBRITE PURCHASES/SALES TRACKER
+
+
+
+/ GOOGLE ANALYTICS PURCHASE TRACKER
+:javascript
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-17750582-2']);
+ _gaq.push(['_trackPageview']);
+ _gaq.push(['_addTrans',
+ '#{@order.id}',
+ '',
+ '#{@order.total_price.to_f}',
+ '',
+ '#{@order.shipping_price.to_f}',
+ '',
+ '',
+ ''
+ ]);
+ _gaq.push(['_addItem',
+ '#{@order.id}',
+ '#{@order.buyable_id}',
+ '#{@order.contents}',
+ '',
+ '#{@order.subtotal.to_f}',
+ '1'
+ ]);
+ _gaq.push(['_trackTrans']); //submits transaction to the Analytics servers
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = 'https://ssl.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+
+
+:javascript
+ var n = 5;
+ setInterval(function () {
+ if (n > 0) {
+ n--;
+ $("#redirect-timer").text(n);
+ } else {
+ window.location = "#{orders_url(secure:true)}";
+ };
+ }, 1000);
+
diff --git a/app/views/password_resets/edit.html.haml b/app/views/password_resets/edit.html.haml
new file mode 100644
index 0000000..5875349
--- /dev/null
+++ b/app/views/password_resets/edit.html.haml
@@ -0,0 +1,17 @@
+#reset-password-page
+ %h2.reset-your-password Reset Your Password
+ = form_for @account, :url => password_reset_path(:code => params[:code]) do |f|
+ - if @account.errors.any?
+ #errorExplanation
+ %p Oops, please correct the following items to proceed:
+ %ul
+ - @account.errors.full_messages.each do |msg|
+ %li= msg
+ .field
+ = f.label :password
+ = f.password_field :password
+ .field
+ = f.label :password_confirmation, "Confirm password"
+ = f.password_field :password_confirmation
+ .actions
+ = f.submit "Update Account", :class => "button"
\ No newline at end of file
diff --git a/app/views/password_resets/new.html.haml b/app/views/password_resets/new.html.haml
new file mode 100644
index 0000000..db68835
--- /dev/null
+++ b/app/views/password_resets/new.html.haml
@@ -0,0 +1,8 @@
+#reset-password-page
+ %h2.reset-your-password Reset Your Password
+ %p Please fill out the form below. Instructions to reset your password will be sent to you.
+ = form_tag password_reset_path do
+ %p.field
+ = label_tag :email, "Email Address:"
+ = text_field_tag :email
+ = submit_tag "Reset my password", :class => "button"
diff --git a/app/views/products/_product.html.haml b/app/views/products/_product.html.haml
new file mode 100644
index 0000000..8137fea
--- /dev/null
+++ b/app/views/products/_product.html.haml
@@ -0,0 +1,30 @@
+%td.product-listing[product]{:class => product_counter.next.multiple_of?(4) ? "last" : ""}
+ .product-container.clearfix
+ .title
+ %h3= link_to product.name, product
+ %p max. discount: #{number_to_currency product.max_discount}
+ .image
+ = link_to image_tag(product.main_picture.url :index), product
+ %table.discount-numbers
+ %tr.retail-price
+ %td.action
+ %td.label Retail Value:
+ %td.value #{ number_to_currency product.retail_price }
+ %tr.member-points
+ %td.action -
+ %td.label MemberPoints:
+ %td.value #{ number_to_currency product.display_discount(current_user) }
+ %tr.member-price
+ %td.action =
+ %td.label
+ %span
+ You Pay:
+ %td.value
+ %span.price (#{display_percentage product} off) #{ number_to_currency product.display_price(current_user) }
+ .redeem
+ - if logged_in?
+ = link_to "Redeem MemberPoints", new_order_path(:buyable => product.id, :kind => :reward), :class => "button"
+ - else
+ = link_to "Redeem MemberPoints", new_session_path, :class => "button"
+- if product_counter.next.multiple_of?(4)
+
diff --git a/app/views/products/index.html.haml b/app/views/products/index.html.haml
new file mode 100644
index 0000000..eae843d
--- /dev/null
+++ b/app/views/products/index.html.haml
@@ -0,0 +1,16 @@
+- content_for :title, "FirstBargain.com - Member Reward Store"
+
+#reward-store
+ %h2.members-shop Members Shop
+ #store-explanation
+ - if logged_in?
+ %p You have #{ current_user.points} in MemberPoints. Redeem now for discounts on popular items.
+ - else
+ %p #{link_to "Sign in", new_session_path} to view your MemberPoints balance. Redeem your points for discounts on popular items.
+ #product-listing
+ #product-filter
+ %table#main-products
+ %tr
+ = render @products
+ = fill_grid @products, "product", 4
+ = pagination @products
\ No newline at end of file
diff --git a/app/views/products/show.html.haml b/app/views/products/show.html.haml
new file mode 100644
index 0000000..fd5fcdd
--- /dev/null
+++ b/app/views/products/show.html.haml
@@ -0,0 +1,49 @@
+- content_for :title, "FirstBargain.com - #{@product.name}"
+
+#reward-store.clearfix
+ #main-store-grid
+ %h2#product-name= @product.name
+ #product-description
+ = simple_format @product.description
+ #secondary-store-grid.clearfix
+ .product-images
+ #viewer= image_tag(@product.main_picture.url(:medium), size: "280x260")
+ %ul#gallery.clearfix
+ - @product.pictures.each do |p|
+ %li[p]
+ = image_tag(p.data.url(:thumb), size: "70x65")
+ :javascript
+ registerRollover("#{dom_id p}","#{p.data.url :medium}");
+ .discount-container
+ %h3 Member's Discount
+ %table.discount-numbers
+ %tr.retail-price
+ %td.action
+ %td.label Retail Value:
+ %td.value #{number_to_currency @product.retail_price}
+ %tr.member-points
+ %td.action -
+ %td.label MemberPoints:
+ %td.value #{number_to_currency @product.display_discount(current_user)}
+ %tr.member-price
+ %td.action =
+ %td.label
+ %span You Pay:
+ %td.value
+ %span.price #{number_to_currency @product.display_price(current_user)} (#{display_percentage @product} off)
+ %tr.shipping-price
+ %td{:colspan=>"3"} +#{number_to_currency @product.shipping_price} Shipping & Handling
+ .redeem= link_to "Redeem MemberPoints", new_order_path(:buyable => @product.id, :kind => :reward), :class => "button"
+ // SHIPPING INFORMATION
+ - unless @product.bid_pack?
+ .shipping-information.clearfix
+ .title Shipping Information
+ .delivery-cost Delivery Cost: #{ shipping_price @product }
+ .return-policy
+ Return Policy:
+ - if [12,13,14,15,28,29].include? @product.category_id
+ Gift cards are not eligible for returns
+ - else
+ Return within 14 days for any reason
+ .questions Any Questions? #{ link_to "Contact Us", contact_path }
+
diff --git a/app/views/sessions/_form.html.haml b/app/views/sessions/_form.html.haml
new file mode 100644
index 0000000..d1a29f5
--- /dev/null
+++ b/app/views/sessions/_form.html.haml
@@ -0,0 +1,20 @@
+= form_for @session, :url => session_path(:secure => true) do |f|
+ - if @session.errors.any?
+ #errorExplanation
+ %p Oops, please correct the following items to proceed:
+ %ul
+ - @session.errors.full_messages.each do |msg|
+ %li= msg
+ .field.input
+ = f.label :username
+ = f.text_field :username
+ .field.input
+ = f.label :password
+ = f.password_field :password
+ .password-reset
+ Forgot your password? #{ link_to "Click here", new_password_reset_path }
+ .field
+ = f.check_box :remember_me
+ = f.label :remember_me
+ .actions
+ = f.submit "Login", :id => "login-submit", :class => "button"
diff --git a/app/views/sessions/new.html.haml b/app/views/sessions/new.html.haml
new file mode 100644
index 0000000..e3c5f03
--- /dev/null
+++ b/app/views/sessions/new.html.haml
@@ -0,0 +1,11 @@
+- content_for :title, "FirstBargain.com - User Sign In"
+
+#login-page.clearfix
+ .left-column-2
+ %h2.sign-in
+ Sign In to Your Account
+ = render 'form'
+ .right-column-2
+ %h2.new-to-website New to FirstBargain.com?
+ %p(style="line-height:1.3em;") Welcome to FirstBargain.com, a fun and exciting auction website dedicated to bargain seekers. At First Bargain you can win designer handbags, iPads, gift cards, and all sorts of other popular products for incredibly low prices.
+ %p= link_to "Register For Free", new_account_path, :id => "signup-for-free", :class => "button"
diff --git a/app/views/splashes/show.html.haml b/app/views/splashes/show.html.haml
new file mode 100644
index 0000000..e32101c
--- /dev/null
+++ b/app/views/splashes/show.html.haml
@@ -0,0 +1,43 @@
+!!! 5
+%html
+ %head
+ = stylesheet_link_tag 'viewer'
+ = javascript_include_tag 'jquery', 'viewer'
+ /[if IE 8]
+ :css
+ #container {
+ display: table;
+ }
+ /[if IE 7]
+ :css
+ body {
+ font-weight: normal;
+ font-size: 11px;
+ }
+ %body
+ #container.clearfix
+ %h1
+ = link_to image_tag("header/logo.gif"), root_path
+ #content-wrapper
+ #content
+ #home-page
+ %h2 Innovative Auctions. Coveted Products. Member Rewards.
+ %p FirstBargain.com is a fun and exciting auction website dedicated to bargain seekers. At FirstBargain you can win Playstations, iPads, gift cards, and all sorts of other popular products for incredibly low prices.
+ %p= link_to ("» Click Here to Check Out Our Main Site «").html_safe, "http://www.firstbargain.com"
+ #signin
+ = form_for @a, :url => splash_path(:secure => false) do |f|
+ #errorExplanation
+ - if @a.errors.any?
+ %p Sorry, a problem occurred while logging you in:
+ %ul
+ - @a.errors.full_messages.each do |msg|
+ %li= msg
+ .authorized Authorized Users - Sign In:
+ .field.clearfix
+ = f.label :login, "Username"
+ = f.text_field :login
+ .field.clearfix
+ = f.label :password
+ = f.password_field :password
+ .actions
+ = f.submit "Login", :class => "button"
\ No newline at end of file
diff --git a/app/views/staff_mailer/daily_activity_report.html.haml b/app/views/staff_mailer/daily_activity_report.html.haml
new file mode 100644
index 0000000..0d17d61
--- /dev/null
+++ b/app/views/staff_mailer/daily_activity_report.html.haml
@@ -0,0 +1,56 @@
+%table
+ %caption Daily Report from #{@since.to_s :default} to #{@now.to_s :default}
+ %tr
+ %td Bid Revenue (Sum of Bid Pack Purchases)
+ %tc= number_to_currency @bidpacks.revenue
+ %tr
+ %td Auction Revenue (Sum of Final Auction Closing Prices)
+ %td= number_to_currency @auctions.revenue
+ %tr
+ %td Buy Now Revenue (Sum of Exercised Buy Now Prices)
+ %td= number_to_currency @buynows.revenue
+ %tr
+ %td Members Shop Revenue (Sum of Members Shop Purchases)
+ %td= number_to_currency @rewards.revenue
+ %tr
+ %td Auction COGS (Sum of Retail Prices of Ended Auctions)
+ %td= number_to_currency @auctions.cogs
+ %tr
+ %td Buy Now COGS (Sum of Retail Prices of Buy Now Purchases)
+ %td= number_to_currency @buynows.cogs
+ %tr
+ %td Members Shop COGS (Sum of Retail Prices of Members Shop Purchases)
+ %td= number_to_currency @rewards.cogs
+ %tr
+ %td Total # of Signups
+ %td= @accounts.size
+ %tr
+ %td Total # of Bid Pack Purchases
+ %td= @bidpacks.size
+ %tr
+ %td Total # of Items Auctioned Off
+ %td= @auctions.size
+ %tr
+ %td Total # of Buy Nows
+ %td= @buynows.size
+ %tr
+ %td Total # of Members Shop Purchases
+ %td= @rewards.size
+
+%table
+ %caption Affiliate Report
+ %tr
+ %th Total # of Registrations
+ %td
+ - @a_signups.each_pair do |aff, count|
+ %p= "#{aff || 'None'}: #{count}"
+ %tr
+ %th Total # of Bid Pack Transactions
+ %td
+ - @a_bid_count.each_pair do |aff, count|
+ %p= "#{aff || 'None'}: #{count}"
+ %tr
+ %th Total Value of Bid Pack Transactions
+ %td
+ - @a_bid_value.each_pair do |aff, money|
+ %p= "#{aff || 'None'}: #{number_to_currency money}"
\ No newline at end of file
diff --git a/app/views/staff_mailer/inquiry.text.erb b/app/views/staff_mailer/inquiry.text.erb
new file mode 100644
index 0000000..0e999fa
--- /dev/null
+++ b/app/views/staff_mailer/inquiry.text.erb
@@ -0,0 +1,3 @@
+<%= @contact.message %>
+
+Sent from <%= @contact.email %>
\ No newline at end of file
diff --git a/app/views/staff_mailer/weekly_activity_report.html.haml b/app/views/staff_mailer/weekly_activity_report.html.haml
new file mode 100644
index 0000000..25e9b9c
--- /dev/null
+++ b/app/views/staff_mailer/weekly_activity_report.html.haml
@@ -0,0 +1,18 @@
+%table
+ %caption Weekly Report from #{@since.to_s :default} to #{@now.to_s :default}
+ %tr
+ %td Total # of New Signups
+ %td= @new_signups
+ %tr
+ %td Total # of New Signups that bought at least one bid pack
+ %td= @new_purchasers
+ %tr
+ %td Total # of Returning Users who bought at least one bid pack
+ %td= @old_purchasers
+ %tr
+ %td Total Bid Revenue from New Customers
+ %td= number_to_currency @new_bid_revenue
+ %tr
+ %td Total Bid Revenue from Returning Customers
+ %td= number_to_currency @old_bid_revenue
+
\ No newline at end of file
diff --git a/app/views/static/about.html.haml b/app/views/static/about.html.haml
new file mode 100644
index 0000000..5b0b389
--- /dev/null
+++ b/app/views/static/about.html.haml
@@ -0,0 +1,11 @@
+- content_for :title, "FirstBargain.com - About Us"
+
+#flat-page
+ %h2.about-us About Us
+ #about-overview
+ .unit
+ %h3 Your First Stop to Bargain Shopping
+ %p Why pay full price when you can spend 90% less? FirstBargain.com has redefined internet shopping to bring you unheard of deals on today's hottest products. Through our fun and exciting auctions, we offer a wide selection of brand new, factory-sealed products including Apple iPads, flat screen TV's, handbags and more! We warmly welcome you to join the thousands of members who choose us as their first stop to bargain shopping.
+ .unit
+ %h3 Innovative Live Auctions
+ %p Our auctions work quite differently from eBay’s. All items start at $0 and each bid raises the price by only a few pennies. When the remaining time on the auction clock is under 30 seconds (or 20 seconds depending on the auction), each bid adds several seconds back onto the timer. The last bidder standing when the timer runs out wins the auction. Bids costs only $0.75 each, and winners walk away with huge bargains! See our #{ link_to "How It Works", tutorial_path } page to learn more.
\ No newline at end of file
diff --git a/app/views/static/faq.html.haml b/app/views/static/faq.html.haml
new file mode 100644
index 0000000..df09a13
--- /dev/null
+++ b/app/views/static/faq.html.haml
@@ -0,0 +1,45 @@
+- content_for :title, "FirstBargain.com - Frequently Asked Questions"
+
+#faq-page-index
+ %h2.faq Frequently Asked Questions
+ .wrapper
+ .row.clearfix
+ .column.new-users
+ = link_to "New to FirstBargain?", faq_new_user_path, :class => "button"
+ %ul
+ %li= link_to "How to Participate", faq_new_user_path
+ %li= link_to "Verify Email Address", faq_new_user_path
+ %li= link_to "Purchase Bid Credits", faq_new_user_path
+ %li= link_to "Read Bidding Tips", faq_new_user_path
+ %li= link_to "Choose an Auction", faq_new_user_path
+ .column.auctions
+ = link_to "Auctions & Bidding", faq_auctions_path, :class => "button"
+ %ul
+ %li= link_to "FirstBargain Auctions Explained", faq_auctions_path
+ %li= link_to "Winning an Auction", faq_auctions_path
+ %li= link_to "What Happens if I Don't Win?", faq_auctions_path
+ %li= link_to "What are Beginner Auctions?", faq_auctions_path
+ %li= link_to "What is the Bid Assistant?", faq_auctions_path
+ .column.last.account
+ = link_to "My Account", faq_account_path, :class => "button"
+ %ul
+ %li= link_to "Accessing the \"My Account\" Page", faq_account_path
+ %li= link_to "Change Username or Password", faq_account_path
+ %li= link_to "Forgot Password?", faq_account_path
+ %li= link_to "Change Email Address", faq_account_path
+ %li= link_to "Refer Friends", faq_account_path
+ %li= link_to "Redeem Coupons", faq_account_path
+ .row.clearfix
+ .column.shipping
+ = link_to "Shipping & Returns", faq_shipping_path, :class => "button"
+ %ul
+ %li= link_to "Order Status", faq_shipping_path
+ %li= link_to "Shipping Costs", faq_shipping_path
+ %li= link_to "Delivery Times", faq_shipping_path
+ %li= link_to "Refund & Returns", faq_shipping_path
+ .column.payment
+ = link_to "Payment Information", faq_payment_path, :class => "button"
+ %ul
+ %li= link_to "Accepted Payment Methods", faq_payment_path
+ %li= link_to "Is My Credit Card Information Safe?", faq_payment_path
+ %li= link_to "Your Credit Card Billing Statement", faq_payment_path
diff --git a/app/views/static/faq_account.html.haml b/app/views/static/faq_account.html.haml
new file mode 100644
index 0000000..cb4a7ed
--- /dev/null
+++ b/app/views/static/faq_account.html.haml
@@ -0,0 +1,22 @@
+- content_for :title, "FirstBargain.com - FAQ: My Account"
+
+#faq-page-show
+ %h2 My Account
+ .block
+ %h3 Accessing the "My Account" Page
+ %p You can find the link to your #{ logged_in? ? (link_to "My Account", account_path) : "\"My Account\"" } page on the top-right corner of your browser next to the "Sign In/Logout" button.
+ .block
+ %h3 Change Username or Password
+ %p To change your username or password, first go to the #{ logged_in? ? (link_to "My Account", account_path) : "\"My Account\"" } page. Then, choose the #{ logged_in? ? (link_to "Account Settings", edit_account_path) : "\"Account Settings\"" } tab on the left side. Enter your new username or password in the appropriate fields and click Submit.
+ .block
+ %h3 Forgot Password?
+ %p Click on the "Signin" button on the top-right corner of your browser. On the bottom of the login box that appears you will see a #{ logged_in? ? "\"click here\"" : (link_to "click here", new_password_reset_path)} link next to the words Forgot your Password? Clicking on the link will take you to a page requesting your email address. Once you click the "Reset Password" button, an email will be sent to you with instructions on resetting your password.
+ .block
+ %h3 Change Email Address
+ %p To update your email address, first go to the #{ logged_in? ? (link_to "My Account", account_path) : "\"My Account\"" } page. Then, choose the #{ logged_in? ? (link_to "Account Settings", edit_account_path) : "\"Account Settings\"" } tab on the left side. Enter your new e-mail address in the appropriate field and click Submit.
+ .block
+ %h3 Refer Friends
+ %p Inviting your friends is quick and easy. Just go to the #{ logged_in? ? (link_to "My Account", account_path) : "\"My Account\"" } page and choose the #{ logged_in? ? (link_to "Invitation", invitations_path) : "\"Invitation\"" } tab on the left side. Enter Your Name and the Recipient's email address and click Submit. If you want to invite multiple friends at once, make sure to separate email addresses using commas.
+ .block
+ %h3 Redeem Coupons
+ %p To redeem a coupon code, first go to the #{ logged_in? ? (link_to "My Account", account_path) : "\"My Account\"" } page. Then, choose the #{ logged_in? ? (link_to "Redeem Coupon", new_coupon_path) : "\"Redeem Coupon\"" } tab on the left side.
\ No newline at end of file
diff --git a/app/views/static/faq_auctions.html.haml b/app/views/static/faq_auctions.html.haml
new file mode 100644
index 0000000..6350a75
--- /dev/null
+++ b/app/views/static/faq_auctions.html.haml
@@ -0,0 +1,23 @@
+- content_for :title, "FirstBargain.com - FAQ: Auctions & Bidding"
+
+#faq-page-show
+ %h2 Auctions & Bidding
+ .block
+ %h3 FirstBargain Auctions Explained
+ %p All auctions start with an initial price of $0. Each bid raises the auction price by a fixed increment (1c, 5c, or 15c depending on the auction). Each time you place a bid, one bid credit is deducted from your account. Also, up to 30 seconds is added to the auction timer each time someone bids. This is similar to the “Going once…Going twice…SOLD” approach of traditional auctions, which gives other bidders a chance to make a higher bid if they wish. You win the auction if you are the highest bidder when the timer reaches zero.
+ .block
+ %h3 Winning an Auction
+ %p When you win an auction, your bid button will turn into a blue "Redeem" button. Click the button and simply follow the checkout instructions. If you choose not to redeem right away, you may still do so within 7 days of the auction closing date by going to the #{ logged_in? ? (link_to "My Account", account_path) : "\"My Account\"" } page.
+ .block
+ %h3 What Happens if I Don't Win?
+ %p If you do not win, the bids you have placed on the auction will not be returned to your account; however, we offer the “Buy Now” feature on most auctions! This feature allows you to use the bids you spent on an auction to buy the same item at a discounted price. See example below:
+ %p Say you placed 40 bids (or $30 worth) on a $50 item, but another bidder wins the auction. Through “Buy Now” you are given the opportunity to purchase the product for its retail value of $50 minus the $30 you spent in bids. Thus, in this example you would be able to buy the item for just $20.
+ .block
+ %h3 What are Beginner Auctions?
+ %p They are auctions reserved only for customers who have not yet won an auction. You will see them marked with an orange border (only visible to users with no wins).
+ .block
+ %h3 What is the Bid Assistant?
+ %a(name="5")
+ %p The Bid Assistant is an automated bidding tool that allows you to place bids on auctions even when you are away from the computer. Simply activate it with the click of a button and the Bid Assistant will place bids according to your instructions.
+ %p You can find the Bid Assistant interface located below the Bid History box for each auction. Input the "Start at" price and the "# of Bids" you want to authorize for use. Now, click the "Activate" button and the Bid Assistant will immediately get to work for you!
+ %p The Bid Assistant places bids on your behalf when the remaining time on the auction clock is between 0 and 20 seconds. You can set a minimum of 3 bids and a maximum of 50 bids. You may deactivate the Bid Assistant at any time.
\ No newline at end of file
diff --git a/app/views/static/faq_new_user.html.haml b/app/views/static/faq_new_user.html.haml
new file mode 100644
index 0000000..f13e7e6
--- /dev/null
+++ b/app/views/static/faq_new_user.html.haml
@@ -0,0 +1,19 @@
+- content_for :title, "FirstBargain.com - FAQ: Getting Started"
+
+#faq-page-show
+ %h2.getting-started Getting Started
+ .block
+ %h3 How to Participate
+ %p Before you can start bidding on our auctions, you must first register an account and purchase bid credits. Bids costs $0.75 each and can be purchased from our #{ logged_in? ? (link_to "Bids Store", bids_path) : "\"Bids Store\"" }.
+ .block
+ %h3 Verify Email Address
+ %p Upon registration of an account with FirstBargain, you will receive an email asking you to verify your email address. This is to ensure you receive all important notification emails from us. If you have any trouble verifying your email address, please #{ link_to "contact us", contact_path }.
+ .block
+ %h3 Purchase Bid Credits
+ %p Bids $0.75 each and are sold in packs of 30, 50, 100, and 200. Once you purchase a bid pack, you will immediately see bids credited to your account.
+ .block
+ %h3 Read Bidding Tips
+ %p We strongly suggest all new customers to read through our #{ link_to "Bidding Tips", tips_path } page. There you will find helpful hints and strategies to assist you in becoming a successful bidder on FirstBargain!
+ .block
+ %h3 Choose an Auction
+ %p All product for auction on our site are brand new, factory-sealed, and 100% authentic. Now, pick the product you want and start bidding. Happy Bidding!
\ No newline at end of file
diff --git a/app/views/static/faq_payment.html.haml b/app/views/static/faq_payment.html.haml
new file mode 100644
index 0000000..336e380
--- /dev/null
+++ b/app/views/static/faq_payment.html.haml
@@ -0,0 +1,13 @@
+- content_for :title, "FirstBargain.com - FAQ: Payment Information"
+
+#faq-page-show
+ %h2 Payment Information
+ .block
+ %h3 Accepted Payment Methods
+ %p We accept Visa, Mastercard, Discover, and PayPal.
+ .block
+ %h3 Is My Credit Card Information Safe?
+ %p We have partnered with CCBill and PayPal to provide an easy and secure payment solution for our customers. For your protection, any information you provide to us is transmitted via VeriSign's secure 256-bit encryption system. Our company does not store any credit card information.
+ .block
+ %h3 Your Credit Card Billing Statement
+ %p If you pay using a credit card, transactions on your billing statement will appear as CCBILL.COM*FIRSTBARGAIN. If you pay via PayPal, transactions on your billing statement will appear as PAYPAL*FRSTBARGAIN.
\ No newline at end of file
diff --git a/app/views/static/faq_shipping.html.haml b/app/views/static/faq_shipping.html.haml
new file mode 100644
index 0000000..6f0d640
--- /dev/null
+++ b/app/views/static/faq_shipping.html.haml
@@ -0,0 +1,17 @@
+- content_for :title, "FirstBargain.com - FAQ: Shipping & Returns"
+
+#faq-page-show
+ %h2 Shipping & Returns
+ .block
+ %h3 Order Status
+ %p To check the status on any order, go to the #{ logged_in? ? (link_to "My Account", account_path) : "\"My Account\"" } page and choose the #{ logged_in? ? (link_to "Order & Account History", orders_path) : "\"Order & Account History\"" } tab on the left side.
+ .block
+ %h3 Shipping Costs
+ %p Shipping & handling costs are clearly displayed for each item beneath the going price of the auction. These rates apply to all residences and businesses within the 48 US contiguous states. We currently do not ship to P.O. Boxes or any locations outside the United States.
+ .block
+ %h3 Delivery Times
+ %p You can expect most items to arrive within 14 days after placing your order. If you have not received an item after this time, please #{ link_to "contact us", contact_path } to ensure successful delivery.
+ .block
+ %h3 Refunds & Returns
+ %p Items can be returned within 14 days for a refund unless otherwise noted. The item must be in its original condition and packaging to qualify for a full refund, exclusive of bids used. For instructions on obtaining a return authorization, see our #{ link_to "Refunds & Returns", returns_path } page.
+ %p IMPORTANT: Please #{ link_to "contact us", contact_path } first before attempting to return an item or we may be unable to process a refund.
\ No newline at end of file
diff --git a/app/views/static/guarantee.html.haml b/app/views/static/guarantee.html.haml
new file mode 100644
index 0000000..6f93d0f
--- /dev/null
+++ b/app/views/static/guarantee.html.haml
@@ -0,0 +1,14 @@
+- content_for :title, "FirstBargain.com - Our Guarantee Policy"
+
+#FirstBargain-guarantee-page
+ %span.right(style="margin-right:-20px;")= image_tag 'how-to-play/apple-ipad.gif'
+ .unit
+ %h3 Your Satisfaction Comes First
+ %p At First Bargain, we believe that there’s nothing better than a happy customer. That is why we make an effort to respond to all member inquiries within 24 hours. We not only want you to have a fun time bidding on our auctions, but also feel completely satisfied with the products you win. We offer a 14 day #{link_to "return policy", returns_path} because we know that everyone changes their mind once in a while!
+ .unit
+ %h3 Always New, Always Authentic
+ %p Our products are sourced directly from the manufacturer or authorized distributor. This means that all items you receive are guaranteed brand new, factory-sealed, and 100% authentic! If you have any product related questions, please feel free to #{ link_to "contact us", contact_path }.
+ .unit
+ %h3 Safe and Fair Internet Practices
+ %p We take internet security very seriously. FirstBargain.com has partnered with Verisign and CCBill to ensure that all customer credit cards and personal information are processed securely. In addition, our auctions are designed in such a way as to provide a fair auction environment for all of our members. First Bargain employees are not allowed to bid on the auctions, and we guarantee that our company does not use any systems to bid up the price of items.
+
diff --git a/app/views/static/privacy.html.haml b/app/views/static/privacy.html.haml
new file mode 100644
index 0000000..dfc7a56
--- /dev/null
+++ b/app/views/static/privacy.html.haml
@@ -0,0 +1,58 @@
+- content_for :title, "FirstBargain.com - Privacy Policy"
+
+%h2.privacy-policy Privacy Policy
+.unit
+ %p First Bargain provides this Privacy Policy to inform you of our policies and procedures regarding the collection, use and disclosure of personal information we receive from users of FirstBargain.com. This Privacy Policy applies only to information that you provide to us through this Site. This Privacy Policy may be updated from time to time. We will notify you of any material changes by posting the new Privacy Policy on the Site. You are advised to consult this policy regularly for any changes. Unless otherwise defined in this Privacy Policy, terms used in this Privacy Policy have the same meanings as in our First Bargain Terms of Service.
+ %p As used in this policy, the terms “using” and “processing” information include using cookies on a computer, subjecting the information to statistical or other analysis and using or handling information in any way, including, but not limited to collecting, storing, evaluating, modifying, deleting, using, combining, disclosing and transferring information within our organization or among our affiliates within the United States or internationally.
+.unit
+ %h3 Information Collection and Use
+ %p Our primary goals in collecting information are to provide and improve our Site, services, features and content, to administer your Membership (together, the “Service”) and to enable users to enjoy and easily navigate the Site.
+.unit
+ %h3 Personally Identifiable Information.
+ %p When you register with us through the Site, as a First Bargain Subscriber or when you choose to create your own profile webpage we will ask you for personally identifiable information. This refers to information about you that can be used to contact or identify you (“Personal Information”). Personal Information includes, but is not limited to, your name, username, phone number, credit card or other billing information, email address and home and business postal addresses, and any other information that you decide to add to your profile webpage. We use your Personal Information mainly to provide the Service and administer your inquiries.
+ %p We also collect the other information that you provide as part of registration and the administration and personalization of the My Account webpage (e.g., without limitation, zip code (on its own) and individual preferences) (“Non-Identifying Information”).
+ %p We use your Personal Information (in some cases, in conjunction with your Non-Identifying Information) mainly to provide the Service, complete your transactions, and administer your inquiries.
+ %p We may also collect information regarding your activity on the Site, such as your bidding history, auctions participated in, auctions won/lost, prices paid, bids used and other similar information associated with your username. We use such information solely in accordance with this Privacy Policy
+ %p Certain Non-Identifying Information would be considered a part of your Personal Information if it were combined with other identifiers (for example, combining your zip code with your street address) in a way that enables you to be identified. But the same pieces of information are considered Non-Identifying Information when they are taken alone or combined only with other non-identifying information (for example, your viewing preferences). We may combine your Personal Information with Non-Identifying Information and aggregate it with information collected from other First Bargain Users (defined below) to attempt to provide you with a better experience, to improve the quality and value of the Service and to analyze and understand how our Site and Service are used.
+ %p We may also use the combined information without aggregating it to serve you specifically, for instance to deliver a product to you according to your preferences or restrictions. We also use your Personal Information to contact you with First Bargain newsletters, marketing or promotional materials and other information that may be of interest to you. If you decide at any time that you no longer wish to receive such communications from us, please follow the unsubscribe instructions provided in any of the communications or update your “user preferences” information. (See “Changing or Deleting Information,” below.)
+ %p Log Data. When you visit the Site, whether as a First Bargain Subscriber or a non-registered user just browsing (any of these, a “First Bargain User”), our servers automatically record information that your browser sends whenever you visit a website (“Log Data”). This Log Data may include information such as your computer’s Internet Protocol (“IP”) address, browser type or the webpage you were visiting before you came to our Site, pages of our Site that you visit, the time spent on those pages, information you search for on our Site, access times and dates, and other statistics. We use this information to monitor and analyze use of the Site and the Service and for the Site’s technical administration, to increase our Site’s functionality and user-friendliness, and to better tailor it to our visitors’ needs. For example, some of this information is collected so that when you visit the Site again, it will recognize you and serve advertisements and other information appropriate to your interests. We also use this information to verify that visitors to the Site meet the criteria required to process their requests. [We do not treat Log Data as Personal Information or use it in association with other Personal Information, though we may aggregate, analyze and evaluate such information for the same purposes as stated above regarding other Non-Identifying Information.]
+.unit
+ %h3 Cookies
+ %p Like many websites, we use “cookies” to collect information. A cookie is a small data file that we transfer to your computer’s hard disk for record-keeping purposes. We use cookies for two purposes. First, we utilize persistent cookies to save your registration ID for future logins to the Site. Second, we utilize persistent ID cookies to enable certain features of the Site, to better understand how you interact with the Site and to monitor aggregate usage by First Bargain Users and web traffic routing on the Site. Third party advertisers on the Site may also place or read cookies on your browser. You can instruct your browser, by changing its options, to stop accepting cookies or to prompt you before accepting a cookie from the websites you visit. If you do not accept cookies, however, you may not be able to use all portions of the Site or all functionality of the Service.
+.unit
+ %h3 Emailing Via a First Bargain Account
+ %p As part of the Service, First Bargain Subscribers may choose to communicate with First Bargain Subscribers and non-registered users through use of their accounts. Where First Bargain Subscribers have selected the option of adding one or more email addresses to an online form, the message they create in the corresponding template will be sent from First Bargain to those email addresses on their behalf. These email addresses will be stored in the address book the First Bargain Subscriber creates and will be used only for the purpose of sending the email communication to the addressee.
+.unit
+ %h3 Inviting Friends Via a First Bargain Account
+ %p As part of the Service, we may allow First Bargain Subscribers to invite friends to participate in First Bargain service. When First Bargain Subscribers have selected the option of adding one or more email addresses to an online form or via an address book import, the resulting invites will be sent to those email addresses on their behalf. These email addresses will be stored in the import friends function that First Bargain creates and will be used only for the purpose of sending the email invite to the addressee(s) selected by the First Bargain Subscribers.
+.unit
+ %h3 Phishing
+ %p Identity theft and the practice currently known as “phishing” are of great concern to First Bargain. Safeguarding information to help protect you from identity theft is a top priority. We do not and will not, at any time, request your credit card information, your account ID, login password, or national identification numbers in a non-secure or unsolicited e-mail or telephone communication. For more information about phishing, visit the Federal Trade Commission’s website.
+.unit
+ %h3 Information Sharing and Disclosure
+ %p First Bargain Users. When you register through the Site and submit your Personal Information to create a profile webpage, First Bargain Users will see your “Screen Name” and the month and year you first registered with First Bargain (“Required Subscriber Identifiers”). You can choose what other Personal Information you provide as part of your profile (“Other Subscriber Information”) and in some cases you can choose whether to share that information publicly on the Site by making selections via the “user preferences” section of your profile webpage. Providing Other Subscriber Information is voluntary and should correlate with the degree of interaction you want to have with First Bargain Users. We recommend that you guard your anonymity and sensitive information and that you not use your real name as your “Screen Name,” since that would allow others to identify you.
+ %p Auction Data and Bidding History. We may share information on your bidding history, auctions participated in, auctions won/lost, prices paid, bids used and other similar information associated with your username, for the purpose of providing First Bargain Users with information designed to help in the formulation of bidding strategies, in accordance with the options selected by you when creating your user account and profile.
+ %p Aggregate Information and Non-Identifying Information. We may share aggregated information that does not include Personal Information and we may otherwise disclose Non-Identifying Information and Log Data with third parties for industry analysis, demographic profiling and other purposes. Any aggregated information shared in these contexts will not contain your Personal Information.
+ %p Service Providers. We may employ third party companies and individuals to facilitate our Service, to provide the Service on our behalf, to perform Site-related services (e.g., without limitation, maintenance services, database management, fulfillment, web analytics and improvement of the Site’s features) or to assist us in analyzing how our Site and Service are used. These third parties have access to your Personal Information only to perform these tasks on our behalf and are obligated not to disclose or use it for any other purpose. [We may also provide Personal Information to our business partners or other trusted entities for the purpose of providing you with information on goods or services we believe will be of interest to you. You can, at any time, opt out of receiving such communications.]
+ %p Compliance with Laws and Law Enforcement. First Bargain cooperates with government and law enforcement officials and private parties to enforce and comply with the law. We will disclose any information about you to government or law enforcement officials or private parties as we, in our sole discretion, believe necessary or appropriate to respond to claims and legal process (including but not limited to subpoenas), to protect the property and rights of First Bargain or a third party, to protect the safety of the public or any person, or to prevent or stop activity we may consider to be, or to pose a risk of being, any illegal, unethical or legally actionable activity.
+ %p Business Transfers. First Bargain may sell, transfer or otherwise share some or all of its assets, including your Personal Information, in connection with a merger, acquisition, reorganization or sale of assets or in the event of bankruptcy.
+.unit
+ %h3 Changing or Deleting Your Information
+ %p All Subscribers may review, update, correct or delete the Personal Information in their registration profile by contacting us. If you completely delete all such information, then your account may become deactivated. If you would like us to delete your record in our system, please send a request via our #{ link_to "Contact Form", contact_path }. We will use commercially reasonable efforts to honor your request. We may retain an archived copy of your records as required by law or for legitimate business purposes.
+.unit
+ %h3 Security
+ %p First Bargain is very concerned with safeguarding your information. We employ administrative, physical and electronic measures designed to protect your information from unauthorized access.
+ %p We will make any legally required disclosures of any breach of the security, confidentiality, or integrity of your unencrypted electronically stored “personal data” (as defined in applicable state statutes on security breach notification) to you via email or conspicuous posting on this Site in the most expedient time possible and without unreasonable delay, insofar as consistent with (i) the legitimate needs of law enforcement or (ii) any measures necessary to determine the scope of the breach and restore the reasonable integrity of the data system.
+.unit
+ %h3 International Transfer
+ %p Your information may be transferred to — and maintained on — computers located outside of your state, province, country or other governmental jurisdiction where the privacy laws may not be as protective as those in your jurisdiction. If you are located outside the United States and choose to provide information to us, First Bargain transfers Personal Information to the United States and processes it there. Your consent to this Privacy Policy followed by your submission of such information represents your agreement to that transfer.
+.unit
+ %h3 Links to Other Sites
+ %p Our Site contains links to other websites. If you choose to visit an advertiser by “clicking on” a banner ad or other type of advertisement, or click on another third party link, you will be directed to that third party’s website. The fact that we link to a website or present a banner ad or other type of advertisement is not an endorsement, authorization or representation of our affiliation with that third party, nor is it an endorsement of their privacy or information security policies or practices. We do not exercise control over third party websites. These other websites may place their own cookies or other files on your computer, collect data or solicit personal information from you. They may also use JavaScript, web beacons (also known as action tags or single-pixel gifs), and other technologies to measure the effectiveness of their ads and to personalize advertising content. Other sites follow different rules regarding the use or disclosure of the personal information you submit to them. We encourage you to read the privacy policies or statements of the other websites you visit.
+.unit
+ %h3 Our Policy Toward Children
+ %p This Site is not directed to children under 18. We do not knowingly collect personally identifiable information from children under 13. If a parent or guardian becomes aware that his or her child has provided us with Personal Information without their consent, he or she should contact us. If we become aware that a child under 13 has provided us with Personal Information, we will delete such information from our files.
+.unit
+ %h3 Contacting Us
+ %p If you have any questions about this Privacy Policy, please #{link_to "Contact Us", contact_path}.
+
diff --git a/app/views/static/returns.html.haml b/app/views/static/returns.html.haml
new file mode 100644
index 0000000..e81663a
--- /dev/null
+++ b/app/views/static/returns.html.haml
@@ -0,0 +1,15 @@
+- content_for :title, "FirstBargain.com - Return Policy"
+
+%h2.return-policy
+.unit
+ %h3 Making a Bid Refund Request
+ %p You can request a refund only for unused or unexpired Bid Credits, by submitting a request via our #{link_to "Contact Form", contact_path}.
+ %p FirstBargain.com reserves the right to reduce your MemberPoints by the amount of the bid refund. If you have used your MemberPoints we reserve the right to deny your refund. Free, used, or expired Bid Credits are not eligible for a refund. FirstBargain.com reserves the right to deny refund requests intended to abuse or manipulate this policy.
+.unit
+ %h3 Submitting a Product Return Request
+ %p Users have 14 days after delivery to return an item won or purchased through Buy Now unless otherwise noted. Items returned must be in good condition and you are responsible for shipping costs. Return and cancellation requests can be submitted through our #{link_to "Contact Form", contact_path}.
+ %p If, for any reason, you are unable to return the item in good, working condition, FirstBargain.com will retain the right to accept the returned item and reduce the amount of your refund in a proportion equal to the damage on the item (as determined by FirstBargain.com in its sole discretion). In no case will the return of an item entitle you to a refund of the Bid Credits used to win or purchase the item.
+.unit
+ %h3 Billing Inquiries
+ %p(style="margin-bottom:7px;") For questions regarding credit card billing statements, please contact our billing partner:
+ %p.ccbill-contact Website: http://support.ccbill.com Phone: 1-877-374-0182 Email: ccbillsupport@ccbill.com
diff --git a/app/views/static/rewards.html.haml b/app/views/static/rewards.html.haml
new file mode 100644
index 0000000..9483b9c
--- /dev/null
+++ b/app/views/static/rewards.html.haml
@@ -0,0 +1,24 @@
+- content_for :title, "FirstBargain.com - Member Rewards Program"
+#member-rewards-page
+ .unit.clearfix(style="min-height:300px;height:auto!important;")
+ %h3 Buy Now
+ %span.right= image_tag 'how-to-play/buynow.gif'
+ %p The Buy Now feature gives you the option to purchase an item at a discount equal to the amount you invested in the auction.
+ %p Say you placed 100 bids (or $75 worth) on an $149.99 Apple iPod Nano, but another member ends up winning the auction. Through Buy Now, you are given the opportunity to purchase the same $149.99 iPod for only $74.99.
+ %p This is our way of ensuring that our members never pay more than what the item is worth! Buy Now is available anytime during an auction or within 24 hours after its closing.
+ .unit.clearfix
+ %h3 MemberPoints
+ %p For every $1 in bids you purchase from us, we reward you with 1 MemberPoint. These points can be redeemed for discounts on popular items in our Members Shop. Take advantage of this opportunity to ensure none of your money goes to loss, even if you don’t win some auctions.
+ .how-to-cell.clearfix
+ %span.left= image_tag 'how-to-play/memberstore-cell.gif'
+ %dl.explanation
+ %dt 1. Product Name
+ %dd Click on the name or image for detailed product information
+ %dt 2. Regular Price
+ %dd Retail value of the item.
+ %dt 3. MemberPoints
+ %dd Shows how many of your MemberPoints can be applied to the product.
+ %dt 4. What You Pay
+ %dd Your discounted price after applying MemberPoints. The total savings is listed as a percentage.
+ %dt 5. Redeem Points
+ %dd Click on this button to apply your points and buy the product.
diff --git a/app/views/static/rules.html.haml b/app/views/static/rules.html.haml
new file mode 100644
index 0000000..2842aad
--- /dev/null
+++ b/app/views/static/rules.html.haml
@@ -0,0 +1,21 @@
+- content_for :title, "FirstBargain.com - Site Rules"
+
+#flat-page
+ #site-rules-page
+ %h2.site-rules Site Rules
+ .unit
+ %p We created the following rules to ensure that all members have the opportunity to win and enjoy their experience at FirstBargain:
+ .unit
+ %ol
+ %li Only 1 account is allowed per individual and per household.
+ %li You may win up to #{Rails.configuration.daily_win_limit} auctions per day.
+ %li You may win up to #{Rails.configuration.monthly_win_limit} auctions per calendar month.
+ %li You may win 1 auction of the same product with a retail value of over $200 per calendar month (e.g. you can only win a certain Xbox once every calendar month).
+ %li Auction wins must be redeemed within 7 days, after which they expire and can no longer be redeemed.
+ %li "Buy Now" is available for 24 hours after an auction has ended. **
+ %li The use of bots to place bids on auctions is strictly prohibited.
+ %li FirstBargain employees may not participate in any auctions on FirstBargain.com.
+ .unit
+ %p Please note: Breaking these rules violates our Terms of Service and will result in the deactivation of all associated customers’ accounts. We cannot honor any items won while in violation of the Terms of Service. Furthermore, refunds will not be processed for any bids used to win auctions while violating the Terms of Service.
+ .disclaimer ** Buy Now is not available on some auctions. Please check each auction before bidding.
+
\ No newline at end of file
diff --git a/app/views/static/tips.html.haml b/app/views/static/tips.html.haml
new file mode 100644
index 0000000..cf49816
--- /dev/null
+++ b/app/views/static/tips.html.haml
@@ -0,0 +1,23 @@
+- content_for :title, "FirstBargain.com - Bidding Tips"
+
+#flat-page
+ #bidding-tips-page
+ #tips-rules-wrapper
+ = link_to "Bidding Tips", tips_path, :class => "button", :id => "bidding-tips-link"
+ = link_to "Site Rules", rules_path, :class => "button", :id => "site-rules-link"
+ .wrapper
+ %h2.bidding-tips Bidding Tips
+ .unit
+ %p New to First Bargain? Don't know where to start? Below are some tips to help you get started:
+ .unit
+ %h3 Observe before bidding.
+ %p Before you start bidding away, we suggest you watch a few auctions and look through the past auctions to get an idea of how our auctions work. You might notice that some items get more bids than others or that auctions have higher competition during certain times of the day. Use these observations to your advantage by coming up with a strategy to help yourself win with fewer bids!
+ .unit
+ %h3 Start small and work your way up.
+ %p This is a point we always stress to our customers. The common mistake of going straight for a big screen TV or an Apple iPad can be a discouraging experience for many new users. These big ticket items attract a large number of bidders, and novice users may find themselves wasting a bunch of their bids. So start off on the smaller ticket items where you can practice bidding with less competition and then gradually move on to the bigger ticket items as you gain experience.
+ .unit
+ %h3 Ready to pay retail.
+ %p By going into an auction “ready to pay retail”, you’re in a win-win situation. If you were already planning to buy an iPod Touch or a Sony camera, why not try winning it at First Bargain? If you win, you’ll most likely save 60-90% off the retail value. If you’re outbid, no big deal! We offer Buy Now on most of our products, which means you can buy the same product at a discount equal to 100% of the value of bids you used in the auction. But before you go all out bidding, first make sure that Buy Now is offered on the item. Due to inventory restrictions, the Buy Now feature is not offered on some items. For these auctions, we recommend that prior to entering the auction you set a limit on the number of bids you are comfortable using. It’s very easy to get carried away in the heat of bidding, but it never feels good to come out empty-handed after having placed hundreds of bids on an auction.
+ .unit
+ %h3 Bid early.
+ %p Many users like to bid at the very last second of an auction in hopes that they end up the highest bidder, once the timer resets. Although this strategy may work 99% of the time, there are times when your internet connection slows down and your bid does not quite make it to our servers in time. Even with today’s advanced technology, everyone can experience internet lag here and there. As a rule of thumb always bid with at least 5 seconds remaining on the auction clock, so you can stay in the game longer and win!
diff --git a/app/views/static/tos.html.haml b/app/views/static/tos.html.haml
new file mode 100644
index 0000000..8892e13
--- /dev/null
+++ b/app/views/static/tos.html.haml
@@ -0,0 +1,87 @@
+.unit
+ %h2.terms-of-service Terms of Service
+ %p Welcome to FirstBargain.com. FirstBargain.com and/or its affiliates ("FirstBargain.com", "First Bargain", "we" or "us") provide this website ("Site") and the services available through this Site ("Services") to you subject to the following conditions. If you visit or shop at this Site, you accept these terms and conditions ("Terms"). Please read them carefully. We reserve the right, in our sole discretion, at any time to modify, discontinue or terminate the Site and Services, or modify these Terms without advance notice. No material changes to these Terms will be effective unless we have provided you with notice of such changes. If such changes are not acceptable to you, your sole remedy is to cease using this Site and Services, and if applicable, cancel your Site account. By continuing to access or use this Site and Services after we have notified you of the revised Terms, you agree to be bound by such revised Terms.
+.unit
+ %h3 SITE ACCESS
+ %p Subject to your compliance with these Terms, FirstBargain.com grants you a limited license to access and make personal use of this Site and not to download or modify it, or any portion of it, except with express written consent of FirstBargain.com. This license does not include any resale or commercial use of this Site or its contents; any collection and use of any product listings, descriptions, or prices; any derivative use of this Site or its contents; any downloading or copying of account information for the benefit of others; or any use of data mining, robots, or similar data gathering and extraction tools. This Site or any portion of this Site may not be reproduced, duplicated, copied, sold, resold, visited, or otherwise exploited except as expressly permitted under these Terms. You may not frame or utilize framing techniques to enclose any trademark, logo, or other proprietary information (including images, text, page layout, or form) of FirstBargain.com without express written consent. You may not use any meta tags or any other "hidden text" utilizing FirstBargain.com's name or trademarks without the express written consent of FirstBargain.com. Any unauthorized use terminates the permission or license granted by FirstBargain.com. You may not use any FirstBargain.com logo or other proprietary graphic or trademark as part of a link to our Site without our express written permission.
+.unit
+ %h3 ELIGIBILITY
+ %p By registering, you agree that you are a resident of the United States, 18 years of age or older and able to enter into binding contracts. Employees of FirstBargain.com are not eligible to use the site or bid on auctions.
+.unit
+ %h3 YOUR ACCOUNT
+ %p In order to access certain features of the Site and Services, and to post content as described below, you must create an account with us. You may register only one user account per household. During the registration process, you will be asked to choose a username. FirstBargain.com reserves the right to cancel an account, refuse registration or change a username if it is found to be offensive, illegal, infringing upon the rights of others or if it breaches these terms in any other way. You are responsible for maintaining the confidentiality of your account and password and for restricting access to your computer, and you agree to accept responsibility for all activities that occur under your account or password. FirstBargain.com reserves the right to refuse service, terminate accounts, cancel orders or disqualify you when in FirstBargain.com’s sole opinion you have violated the terms of this agreement. When you register at FirstBargain.com you consent to receive communications from us electronically. We will communicate with you electronically for purposes of advising you on transactions, shipments and customer service. From time to time, we may also communicate with you for marketing purposes. You will be given an opportunity to unsubscribe from such marketing communications at any time.
+.unit
+ %h3 PURCHASING AND PAYING FOR BID CREDITS
+ %p Bid Credits ("Bid Credits"), are purchased by you prior to bidding. Bid Credits can be purchased in bundles at prices that will be noted on the site. Payment can be made by credit card, debit card or via PayPal. IMPORTANT! BID CREDITS ARE VALID FOR ONE YEAR AFTER THEY HAVE BEEN CREDITED TO YOUR ACCOUNT. UPON EXPIRATION, BID CREDITS BECOME VOID AND CAN NO LONGER BE PLACED. Once a Bid Credit is used, it is deducted from your account and can no longer be used. Refunds will not be issued for used Bid Credits, expired Bid Credits or free Bid Credits. For further information on refunds please see our Refund Policy.
+.unit
+ %h3 MEMBER POINTS
+ %p At the time of Bid Credit purchase, FirstBargain.com will deliver MemberPoints ("MemberPoints", "MemberPoint", "Member Points", "Member Point") in amount equal to the dollar value of the purchased Bid Credits. MemberPoints can be used in the Members Shop ("Members Shop") to purchase items at a discount level determined solely by FirstBargain.com. MemberPoints are granted for only Bid Credits purchased through our Bid Pack Store, and expire after 365 days from the date of purchase. Bid Credits won from auctions or from auction "Buy Now" are not eligible for MemberPoints.
+ %p MemberPoints are not redeemable for cash and have no cash value. If your account is closed or the Members Shop is cancelled, for any reason, all MemberPoints not yet redeemed are forfeited. MemberPoints forfeited as a result of account or Members Shop closure or violation of these Terms are the sole property of FirstBargain.com.
+.unit
+ %h3 HOW FirstBargain.com WORKS
+ %p With each Bid Credit placed the price of the item on which you are bidding increases by the amount specified. Each new Bid Credit adds time to the auction in an amount equal to the displayed time increment. The auction ends when the auction clock reaches zero. The final bidder is declared the winner. Disputes over auction winners will be decided based on the records maintained by FirstBargain.com. Decisions made by FirstBargain.com in these instances shall be final and binding. Auctions may offer the "Buy Now" option. "Buy Now" will allow you to buy the item bid upon for a price equal to the FirstBargain.com retail value less the value of any Bid Credits used by you during the auction. The option to "Buy Now" will be offered for a limited period of time (usually 24 hours after the auction ends) after which the option to "Buy Now" is revoked.
+.unit
+ %h3 WINNING THE AUCTION/PAYMENT FOR "BUY NOW"
+ %p After an auction has ended, the successful bidder will be presented with a website page that will allow for the auction win to be confirmed, and payment and shipping information to be entered. Auction winners will have 7 days to submit the information on this page and make the payment due. After this 7 day period has elapsed, the ability to claim the item won at auction will be revoked. Similarly, users who choose to "Buy Now" will be presented with a website page that will allow the user to confirm the desire to "Buy Now", enter payment and shipping information and checkout. Users have up to 24 hours after the close of an auction to use the "Buy Now" feature. You may win up to #{Rails.configuration.monthly_win_limit} auctions in a calendar month or #{Rails.configuration.daily_win_limit} times a day, whichever is fewer. Only 1 win of the same product with a retail value over $200 is allowed per calendar month.
+.unit
+ %h3 MEMBERS SHOP
+ %p From time to time, FirstBargain.com may offer items for sale in the Members Shop ("Members Shop, Member Shop"). Usage of the Member Shop is limited to FirstBargain.com users that have purchased Bid Credits and have been awarded Member Points. Users using the Member Shop will be given the opportunity to buy items at a discount using their Member Points. Purchases made in the Member Shop will be completed in an identical manner to those made via the "Buy Now" feature.
+.unit
+ %h3 RETURNS
+ %p You have the right to return items purchased following a winning auction or "Buy Now" purchase. Users have 14 days after delivery to return an item. You are responsible for shipping costs on returned items and items returned must be in good condition. Requests for returns or cancellations must be made in writing via our #{ link_to "Contact Us", contact_path } form:
+ %p If, for any reason, you are unable to return the item in good, working condition, FirstBargain.com will retain the right to accept the returned item and reduce the amount of your refund in a proportion equal to the damage on the item (as determined by FirstBargain.com in its sole discretion). In no case will the return of an item entitle you to a refund of the Bid Credits used to win or purchase the item.
+ %p(style="margin-bottom:7px;") For questions regarding credit card billing statements, please contact our billing partner:
+ %p.ccbill-contact Website: http://support.ccbill.com Phone: 1-877-374-0182 Email: #{mail_to "ccbillsupport@ccbill.com?subject=Billing%20Inquiry%20for%20FirstBargain.com", "ccbillsupport@ccbill.com"}
+.unit
+ %h3 SHIPPING
+ %p Shipping costs will be clearly displayed for each item. Delivery will be made from our suppliers or from our warehouse to the address supplied by the user. Unless otherwise stated, delivery is available within the 48 contiguous United States. Stated delivery times should be considered to be guidelines and are not delivery guarantees. FirstBargain.com shall be entitled to involve third parties to satisfy its contractual obligations without being required to notify the buyer. You are responsible for inspecting the item and reporting any damage to the item to FirstBargain.com promptly upon taking delivery. The successful bidder or user choosing the "Buy Now" option will be responsible for the full shipping costs as displayed.
+.unit
+ %h3 DATA/BIDDING STRATEGIES PROVIDED BY FirstBargain.com
+ %p From time to time, FirstBargain.com may make available to you certain data related to auctions and users bidding on auctions including but not limited to bidder name, number of Bid Credits, number of auctions bid upon, number of auctions won, item auction history, item pricing, and the like. This data is provided to you by FirstBargain.com in an effort to assist you in implementing bidding strategies. FirstBargain.com makes no warranty for the accuracy or efficacy of this data in formulating winning bidding strategies and use of such data in formulating such strategies is undertaken solely at your risk. In a similar fashion, FirstBargain.com may provide tips and hints related to bidding strategies. These tips, hints and bidding strategies are provided to you by FirstBargain.com in an effort to assist you in implementing bidding strategies. FirstBargain.com makes no warranty for the accuracy or efficacy of these strategies in formulating winning bidding strategies and use of such information in formulating such strategies is undertaken solely at your own risk.
+.unit
+ %h3 COLLUSION/TEAM PLAY
+ %p Any kind of collusion or team play is strictly forbidden on FirstBargain. By definition, this includes, but is not limited to, two or more members working together as a team, or creating the impression that there are more people involved and competing to win an auction than there actually are, or placing bids until "Buy Now" offers are earned and then switching over to another account to continue to earn further "Buy Now" offers on the same deal. FirstBargain does not allow two members that know each other to participate in the same auction. Two members participating in the auction are by definition engaging in team play, and automatically lose their right to purchase the product or receive any of their spent Credits back. FirstBargain reserves the right to disqualify in its absolute discretion any users they suspect to be working in a team by voiding all their wins and freezing their accounts. No funds, Credits or bids will be returned or transferred into other accounts.
+.unit
+ %h3 SYSTEM OUTAGES
+ %p At present, and with current technology it is not possible to operate with 100% guaranteed uptime. In some cases, system outages may interrupt the ability to view or bid upon auctions. In this case, FirstBargain.com will halt all auctions and bidding on those auctions until the system outage is resolved. Auctions that are halted will be clearly designated as such. FirstBargain.com will make commercially reasonable efforts to resume the auctions after the outage is resolved. In the event of a system wide outage that prevents you from bidding, FirstBargain.com will refund Bid Credits used in auctions that you were participating in at the time of the auction.
+.unit
+ %h3 CONTENT POLICY
+ %p Visitors may post reviews, comments, photos, and other content; and submit suggestions, ideas, comments, questions, or other information, so long as the content is not illegal, obscene, threatening, defamatory, invasive of privacy, infringing of intellectual property rights, or otherwise injurious to third parties or objectionable and does not consist of or contain software viruses, political campaigning, commercial solicitation, chain letters, mass mailings, or any form of "spam." You may not use a false e-mail address, impersonate any person or entity, or otherwise mislead as to the origin of content. If you do post content or submit material, and unless we indicate otherwise, you grant FirstBargain.com a nonexclusive, royalty-free, perpetual, irrevocable, and fully sublicensable right to use, reproduce, modify, adapt, publish, translate, create derivative works from, distribute, and display such content throughout the world in any media. You grant FirstBargain.com and sublicensees the right to use the name that you submit in connection with such content, if they choose. You represent and warrant that they own or otherwise have the rights to post the content; that the content is accurate; that use of the content supplied does not violate this policy and will not cause injury to any person or entity; and that you will indemnify FirstBargain.com for all claims resulting from content supplied. FirstBargain.com has the right but not the obligation to monitor and edit or remove any activity or content at its sole discretion, and may do so at any time without notice. FirstBargain.com does not endorse any user content or any opinion, recommendation or advice expressed therein, and expressly disclaims any and all liability for any content posted by a user or any third party. Furthermore, FirstBargain.com may immediately terminate your account and access to the Site if you post infringing content.
+.unit
+ %h3 THIRD PARTY WEBSITES
+ %p Our Site may contain links to other websites operated by third parties, and these sites may likewise contain links to other websites. We assume no liability for the content of external links. The operators of the sites linked to and from the Site are solely responsible for their contents. You should carefully review the terms and conditions of such sites, including their privacy policies, before visiting them.
+.unit
+ %h3 WHAT YOU MUST NOT DO
+ %p The Site and Services may be used and accessed for lawful purposes only. You agree to be bound by all applicable local, state, national and foreign laws, treatises and regulations in connection with your use of the Site and Services. In addition, without limitation, you agree that you will not do any of the following while using or accessing the Site or Services: (a) Circumvent, disable or otherwise interfere with security related features of the Site or features that prevent or restrict use or copying of any content; (b) Upload, stream, email or otherwise transmit any content in violation of these Terms; (c) Use any meta tags or other hidden text or metadata utilizing name, trademark, URL or product name incorporating "FirstBargain.com"; (d) Upload, stream, email or otherwise transmit any unsolicited or unauthorized advertising, promotional materials, junk mail, spam, chain letters, "pyramid schemes" or any other form of solicitation, as well as viruses or other computer code that may interrupt, destroy, limit the functionality of the Site or the Services, or interfere with the access of any user to the Site or the Services; (e) Forge any TCP/IP packet header or any part of the header information in any posting or in any way use the Site or Services to send altered, deceptive or false source-identifying information; (f) Attempt to probe, scan or test the vulnerability of any system or network or breach or impair or circumvent any security or authentication measures protecting the Site or Services; (g) Attempt to decipher, decompile, disassemble or reverse engineer any of the software used to provide the Site or Services, (h) Collect or store personal data about other users without their express permission; (j) Impersonate or misrepresent your affiliation with any person or entity, through pretexting or some other form of social engineering or otherwise commit fraud or (k) Encourage or instruct any other individual to do any of the foregoing or to violate any term of these Terms. (l) Use any third party bidding software or other "bot" to assist in bidding or harvesting site data.
+.unit
+ %h3 LIMITATION OF LIABILITY
+ %p IN NO EVENT WILL FIRSTBARGAIN.COM BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY CONSEQUENTIAL, EXEMPLARY, INCIDENTAL, SPECIAL, OR PUNITIVE DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFIT DAMAGES ARISING FROM YOUR USE OF THE SERVICES, EVEN IF FIRSTBARGAIN.COM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. NOTWITHSTANDING ANYTHING TO THE CONTRARY CONTAINED HEREIN, FIRSTBARGAIN.COM'S LIABILITY TO YOU FOR ANY CAUSE WHATSOEVER AND REGARDLESS OF THE FORM OF THE ACTION, WILL AT ALL TIMES BE LIMITED TO THE AMOUNT PAID BY YOU TO FIRSTBARGAIN.COM FOR BID CREDITS IN THE 12-MONTH PERIOD PRECEDING THE EVENT THAT GAVE RISE TO THE LIABILITY.
+.unit
+ %h3 DISCLAIMER OF WARRANTIES
+ %p THE ITEMS THAT YOU MAY WIN ON THE SITE ARE SOLD WITH THE MANUFACTURE’S LIMITED WARRANTY ONLY. YOU ACKNOWLEDGE AND AGREE THAT THE WARRANTY PERIOD VARIES BY MANUFACTURER AND PRODUCT. NO WARRANTY APPLIES TO USED ITEMS. IF FOR ANY REASON YOU ARE NOT SATISFIED WITH ANY ITEMS PURCHASED THROUGH THE SITE OR WISH TO RECEIVE SUPPORT, YOU MUST CONTACT THE MANUFACTURER. EXCEPT AS OTHERWISE EXPRESSLY SET FORTH HEREIN, THE SITE, THE SERVICES AND THE PRODUCTS AVAILABLE ON THE SITE ARE PROVIDED ON AN "AS IS" AND "AS AVAILABLE" BASIS WITHOUT WARRANTIES OF ANY KIND AND FIRSTBARGAIN.COM EXPRESSLY DISCLAIMS ALL WARRANTIES OF ANY KIND, EXPRESS, IMPLIED OR STATUTORY, RELATING THERETO, INCLUDING WITHOUT LIMITATION THE WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, COURSE OF DEALING OR COURSE OF PERFORMANCE. FURTHERMORE, FIRSTBARGAIN.COM DISCLAIMS ANY WARRANTIES: (I) REGARDING THE SECURITY, ACCURACY, RELIABILITY, TIMELINESS AND PERFORMANCE OF THE SITE AND THE SERVICES; AND (II) THAT THE SITE AND THE SERVICES WILL BE ERROR-FREE OR THAT ANY ERRORS WILL BE CORRECTED. NO ADVICE OR INFORMATION, WHETHER ORAL OR WRITTEN, OBTAINED BY YOU FROM FIRSTBARGAIN.COM, INCLUDING WITHOUT LIMITATION ANY DATA OR BIDDING STRATEGIES PROVIDED UNDER THESE TERMS, WILL CREATE ANY WARRANTY NOT EXPRESSLY STATED IN THESE TERMS. FURTHERMORE, YOU UNDERSTAND AND AGREE THAT THERE IS NO GUARANTEE THAT YOU WILL BE ABLE TO WIN ITEMS ON WHICH YOU HAVE BID, AND THAT EVERY TIME YOU PLACE A BID FOR AN ITEM, SUCH BID IS DEDUCTED FROM YOUR USER ACCOUNT AND CAN NO LONGER BE USED, WHETHER OR NOT YOU WILL BE ABLE TO WIN THE ITEM.
+.unit
+ %h3 INDEMNIFICATION
+ %p You agree to defend, indemnify, and hold FirstBargain.com, its officers, directors, employees and agents, harmless from and against any claims, liabilities, damages, losses, and expenses, including without limitation reasonable attorney’s fees and costs, arising out of or in any way connected with (i) your access to or use of the Site and/or the Services; (ii) your violation of these Terms; (iii) your violation of any third party right, including without limitation any intellectual property right, publicity, confidentiality, property or privacy right; or (iv) any claim that any of your content caused damage to a third party.
+.unit
+ %h3 IP OWNERSHIP
+ %p FirstBargain.com owns and retains all proprietary rights in the Site (other than with respect to content posted by you under these Terms) and the Services. The Site contains the copyrighted material, trademarks, and other proprietary information of FirstBargain.com and its licensors, and is protected to the maximum extent permitted by US and foreign laws and international treaty provisions. Access and use of the Site and the Services does not grant you any right or license to the copyrighted material, trademarks, tradenames, logos, images, or other proprietary information of FirstBargain.com and its licensors.
+.unit
+ %h3 MISCELLANEOUS
+ %p These Terms constitute the entire agreement between the parties with respect to the use of the Site and the Services and supersedes all previous and contemporaneous agreements, proposals and communications, written or oral between the parties. Any waiver by either party of any violation of any provision of these Terms will not be deemed to waive any further or future violation of the same or any other provision. If any part or provision of these Terms is held to be unenforceable for any purpose, including but not limited to public policy grounds, then the remainder of these Terms will be fully enforceable as if the unenforceable part or provision never existed. There are no third party beneficiaries of any promises, obligations or representations made by FirstBargain.com. You may not assign their rights and delegate their duties under these Terms to any third parties. THESE TERMS AND ANY DISPUTE RELATING TO THESE TERMS WILL BE GOVERNED BY THE LAWS OF THE UNITED STATES AND THE LAWS OF THE STATE OF WASHINGTON, WITHOUT REGARD TO U.S. OR WASHINGTON CHOICE OF LAW RULES. YOU AND FIRSTBARGAIN.COM AGREE AND CONSENT THAT JURISDICTION, PROPER VENUE, AND THE MOST CONVENIENT FORUMS FOR ALL CLAIMS, ACTIONS, AND PROCEEDINGS OF ANY KIND RELATING TO FIRSTBARGAIN.COM OR THE MATTERS IN THESE TERMS WILL BE EXCLUSIVELY IN COURTS LOCATED IN SEATTLE, WASHINGTON.
+.unit
+ %h3 COMPANY INFORMATION
+ %p(style="margin-left:15px;")
+ Expedient Shopping, Limited
+ Minshull House
+ 67 Wellington Road North
+ Stockport, Cheshire, SK4 2LP
+ United Kingdom
+ %p(style="margin-left:15px;")
+ Managed by:
+ Expedient Shopping, Inc
+ 2018 156th Avenue Northeast
+ Bellevue, WA 98007
+ United States of America
+.unit
+ %h3 REFUND POLICY
+ %p Please refer to our #{link_to "Refunds & Returns Policy", returns_path}.
\ No newline at end of file
diff --git a/app/views/static/tutorial.html.haml b/app/views/static/tutorial.html.haml
new file mode 100644
index 0000000..24d9997
--- /dev/null
+++ b/app/views/static/tutorial.html.haml
@@ -0,0 +1,58 @@
+- content_for :title, "FirstBargain.com - How It Works"
+
+#how-to-play-page
+ .unit#how-to-overview.clearfix
+ %ul
+ %li Buy bid credits to participate (you use 1 bid credit each time you bid)
+ %li All auctions start at $0
+ %li Each bid raises the price by a few cents & adds up to 30 seconds to the clock
+ %ul
+ %li Last bidder standing when timer expires, wins!
+ %li Winner pays final auction price and saves up to 90% off retail
+ %ul.last
+ %li If you're outbid, apply the value of your used bids toward a discount on the same item at its retail value
+ %li Redeem your MemberPoints for discounts on popular items in the #{ link_to "Members Shop", products_path }.
+ .unit#get-started-now.clearfix
+ - unless current_user
+ .right= link_to "Register for Free", new_account_path, :id => "signup-for-free", :class => "button"
+ #sign-up
+ %h3 Registration is FREE and EASY!
+ - else
+ .right= link_to "Register for Free", bids_path, :id => "buy-bid-credits", :class => "button"
+ #buy-bids
+ %h3 Buy bid credits to get started.
+ %p You need them to participate. They cost $0.75 each.
+ %h2.faq Frequently Asked Questions
+ .unit
+ %h3 How do I get started?
+ %ol
+ - unless logged_in?
+ %li #{ link_to "Sign up", new_account_path } to become a member. Registration is free and easy.
+ %li Buy bid credits. They cost only $0.75 each and are sold in packages of varying size.
+ - else
+ %li #{ link_to "Buy bid credits", bids_path }. They cost only $0.75 each and are sold in packages of varying size.
+ %li Pick an auction and start bidding! We offer products ranging from gift cards to high-end designer handbags.
+ .unit
+ %h3 How do auctions work?
+ %p All auctions start at $0 and depending on the auction, each bid raises the price by 1¢, 5¢, or 15¢. If the remaining time on the auction clock is under 30 seconds (or 20 seconds depending on the auction), each bid will reset the timer back to 30 seconds (or 20 seconds) to give everyone an equal chance to participate. This timer reset amount is clearly displayed on each auction. There is no limit for how many bids you can place on an item. So if someone outbids you while the auction is still live, you can bid again to reclaim the highest bidder spot. You win the auction if you are the last bidder standing when the timer expires.
+ .unit
+ %h3 What do I pay?
+ %p To participate in our auctions, you need bid credits. They cost $0.75 each. When you win something, you pay the final auction price plus shipping and handling. If you bid on an auction but don’t win, you can “Buy Now” the same item for the retail value minus the cost of bids you used in the auction. Please note: spent bids are not refundable & the minimum charge on any transaction is $2.95. See our #{ link_to "Member Rewards", rewards_path } page to learn more.
+ .unit
+ %h3 How many times can I win?
+ %p At First Bargain, you can win up to #{Rails.configuration.monthly_win_limit} times a month, #{Rails.configuration.daily_win_limit} times a day. You may win 1 auction of the same product with a retail value of over $200 per calendar month (e.g. you can only win a certain Xbox once every calendar month). This gives everyone a fair chance to win great deals.
+ .unit
+ %h3 How do I get discounts in the Members Shop?
+ %p For every $1 in bid credits you purchase from us, we credit your account with 1 MemberPoint. You can redeem these points to get discounts on gift cards and other popular items we offer in the #{ link_to "Members Shop", products_path }.
+ .unit
+ %h3 Are all products new?
+ %p Absolutely! We get our products directly from manufacturers and authorized distributors. We guarantee that every item offered on our site is brand new, factory-sealed, and 100% authentic.
+ .unit
+ %h3 How long does shipping take?
+ %p Most items will arrive within 14 days after making payment. You can track the status of your item in the #{current_user ? link_to("My Account", orders_path) : "My Account"} page. If you have not received your item after 14 days, please notify us right away so we can ensure that your order is on the way.
+ .unit
+ %h3 Where does First Bargain ship?
+ %p We currently ship to all states in the U.S. except for Alaska and Hawaii.
+ .unit
+ %h3 What’s the return policy?
+ %p Items can be returned within 14 days for a refund unless otherwise noted. The item must be in its original condition and packaging to qualify for a full refund, exclusive of bids used. We will also refund you for any unused bid credits. For detailed information, see our #{ link_to "Refunds & Returns", returns_path } page.
\ No newline at end of file
diff --git a/config.ru b/config.ru
new file mode 100644
index 0000000..9f1b1b7
--- /dev/null
+++ b/config.ru
@@ -0,0 +1,4 @@
+# This file is used by Rack-based servers to start the application.
+
+require ::File.expand_path('../config/environment', __FILE__)
+run FirstBargain::Application
diff --git a/config/application.rb b/config/application.rb
new file mode 100644
index 0000000..7a2d03e
--- /dev/null
+++ b/config/application.rb
@@ -0,0 +1,67 @@
+require File.expand_path('../boot', __FILE__)
+
+require 'rails/all'
+
+# If you have a Gemfile, require the gems listed there, including any gems
+# you've limited to :test, :development, or :production.
+Bundler.require(:default, Rails.env) if defined?(Bundler)
+
+module FirstBargain
+ class Application < Rails::Application
+ # Settings in config/environments/* take precedence over those specified here.
+ # Application configuration should go into files in config/initializers
+ # -- all .rb files in that directory are automatically loaded.
+
+ # Custom directories with classes and modules you want to be autoloadable.
+ config.autoload_paths += %W(#{config.root}/lib)
+
+ # Only load the plugins named here, in the order given (default is alphabetical).
+ # :all can be used as a placeholder for all plugins not explicitly named
+ # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
+
+ # Activate observers that should always be running
+ #config.active_record.observers = :bid_observer, :order_observer
+
+ # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
+ # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
+ config.time_zone = 'Pacific Time (US & Canada)'
+
+ # Configure the default encoding used in templates for Ruby 1.9.
+ config.encoding = "utf-8"
+
+ config.action_view.javascript_expansions[:cdn] = %w[
+ //ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js
+ //ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/jquery-ui.min.js
+ ]
+
+ # Configure sensitive parameters which will be filtered from the log file.
+ config.filter_parameters += [:password]
+
+ config.cache_store = :redis_store, {db: 1}
+
+ # Override me in production.rb
+ config.cdn_enabled = false
+
+ config.active_record.include_root_in_json = false
+
+ config.buy_now_expiration = 1.day
+ config.won_auction_expiration = 1.week
+ config.referral_bonus = 20
+ config.subscription_bonus = 0
+ config.monthly_win_limit = 10
+ config.daily_win_limit = 3
+ config.price_threshold = Money.new(20000) # one $200 item per month
+ config.admins = [1,2,3]
+ config.bid_unit_price = Money.new(75)
+ config.banned_domains = /mailinator|trashymail|mailexpire|maileater|jetable|spambox|spamhole|pookmail/i
+
+ config.recaptcha_public = ENV["RECAPTCHA_PUBLIC"]
+ config.recaptcha_private = ENV["RECAPTCHA_PRIVATE"]
+
+ Time::DATE_FORMATS[:default] = "%m/%d/%y - %I:%M%p"
+ Time::DATE_FORMATS[:order_history] = "%m-%d-%Y%I:%M %p %Z"
+ Time::DATE_FORMATS[:admin] = "%m/%d/%y - %I:%M:%S%p"
+ Time::DATE_FORMATS[:auction] = "%m/%d %I:%M %p %Z"
+ Time::DATE_FORMATS[:bid] = "%r"
+ end
+end
diff --git a/config/assets.yml b/config/assets.yml
new file mode 100644
index 0000000..75923e1
--- /dev/null
+++ b/config/assets.yml
@@ -0,0 +1,38 @@
+javascripts:
+ base:
+ - public/javascripts/sprintf.js
+ - public/javascripts/tiptip.js
+ - public/javascripts/rails.js
+ - public/javascripts/application.js
+ - public/javascripts/poller.js
+ slideshow:
+ - public/javascripts/slideshow.js
+ widget:
+ - public/javascripts/widget.js
+stylesheets:
+ base:
+ - public/stylesheets/base.css
+ - public/stylesheets/dashboard.css
+ - public/stylesheets/flat.css
+ - public/stylesheets/messages.css
+ - public/stylesheets/orders.css
+ - public/stylesheets/product.css
+ - public/stylesheets/tiptip.css
+ - public/stylesheets/jqueryui.css
+ admin:
+ - public/stylesheets/base.css
+ - public/stylesheets/messages.css
+ - public/stylesheets/admin.css
+ - public/stylesheets/jqueryui.css
+ viewer:
+ - public/stylesheets/viewer.css
+ ie:
+ - public/stylesheets/ie.css
+ ie_seven:
+ - public/stylesheets/ie7.css
+ widget_default:
+ - public/stylesheets/external/widget-default.css
+ appconsumer:
+ - public/stylesheets/external/appconsumer.css
+ dailymakeover:
+ - public/stylesheets/external/dailymakeover.css
\ No newline at end of file
diff --git a/config/boot.rb b/config/boot.rb
new file mode 100644
index 0000000..ab6cb37
--- /dev/null
+++ b/config/boot.rb
@@ -0,0 +1,13 @@
+require 'rubygems'
+
+# Set up gems listed in the Gemfile.
+gemfile = File.expand_path('../../Gemfile', __FILE__)
+begin
+ ENV['BUNDLE_GEMFILE'] = gemfile
+ require 'bundler'
+ Bundler.setup
+rescue Bundler::GemNotFound => e
+ STDERR.puts e.message
+ STDERR.puts "Try running `bundle install`."
+ exit!
+end if File.exist?(gemfile)
diff --git a/config/database.yml b/config/database.yml
new file mode 100644
index 0000000..ec7441a
--- /dev/null
+++ b/config/database.yml
@@ -0,0 +1,18 @@
+# SQLite version 3.x
+# gem install sqlite3-ruby (not necessary on OS X Leopard)
+development:
+ adapter: sqlite3
+ database: db/development.sqlite3
+ pool: 5
+ timeout: 5000
+
+# Warning: The database defined as "test" will be erased and
+# re-generated from your development database when you run "rake".
+# Do not set this db to the same as development or production.
+test:
+ adapter: sqlite3
+ database: db/test.sqlite3
+ pool: 5
+ timeout: 5000
+
+# Add your production and staging environments below...
\ No newline at end of file
diff --git a/config/deploy.rb b/config/deploy.rb
new file mode 100644
index 0000000..d6b4063
--- /dev/null
+++ b/config/deploy.rb
@@ -0,0 +1,103 @@
+$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Add RVM's lib directory to the load path.
+require "rvm/capistrano"
+
+require 'bundler/capistrano'
+
+#require 'config/boot'
+#require 'hoptoad_notifier/capistrano'
+
+set :application, "First Bargain"
+set :scm, :git
+set :repository, "git@github.com:expedientshopping/firstbargain.git"
+set :branch, CLI.ui.ask("What branch? ")
+set :user, "deploy"
+set :deploy_via, :remote_cache
+set :scm_auth_cache, true
+set :use_sudo, false
+ssh_options[:forward_agent] = true
+set :rvm_ruby_string, '1.9.2'
+set :rvm_type, :user
+
+desc "Run tasks on staging"
+task :staging do
+ server "SECRET.blueboxgrid.com", :web, :app, :db, :primary => true
+ set :rails_env, 'staging'
+ set :deploy_to, "/home/deploy/staging"
+ set :password, "SECRET"
+end
+
+desc "Run tasks in production environment"
+task :production do
+ set :rails_env, 'production'
+ server "SECRET2.blueboxgrid.com", :web, :app, :db, :primary => true
+ set :deploy_to, "/home/deploy/firstbargain"
+ after "deploy", "deploy:push_deploy_tag"
+ after "deploy:symlink", "deploy:update_crontab"
+end
+
+namespace :deploy do
+ before "deploy:update", "disable_web"
+ after "deploy:update", "deploy:migrate"
+ after "deploy:restart", "deploy:web:enable"
+ after "deploy:update", "deploy:cleanup"
+ after "deploy:symlink", "deploy:jammit"
+ after "deploy:stop", "daemons:stop"
+ after "deploy:start", "daemons:start"
+ after "deploy:restart", "daemons:restart"
+
+ task :start do ; end
+ task :stop do ; end
+ task :restart, :roles => :app, :except => { :no_release => true } do
+ run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
+ end
+
+ desc "Run Jammit"
+ task :jammit do
+ run "cd #{deploy_to}/current && jammit"
+ end
+
+ desc "Set Git tags"
+ task :push_deploy_tag do
+ user = `git config --get user.name`.chomp
+ email = `git config --get user.email`.chomp
+ puts `git tag #{rails_env}_#{release_name} #{current_revision} -m "Deployed by #{user} <#{email}>"`
+ puts `git push --tags origin`
+ end
+
+ desc "Update the crontab file"
+ task :update_crontab, :roles => :db do
+ run "cd #{release_path} && whenever --update-crontab firstbargain"
+ end
+end
+
+namespace :daemons do
+ def rails_env
+ fetch(:rails_env, false) ? "RAILS_ENV=#{fetch(:rails_env)}" : ''
+ end
+
+ desc "Start Stalker workers and Heartbeat"
+ task :start, :roles => :app do
+ run "cd #{current_path};#{rails_env} lib/stalker_worker.rb start"
+ run "cd #{current_path};#{rails_env} lib/heartbeat.rb start"
+ end
+
+ desc "Stop Stalker workers and Heartbeat"
+ task :stop, :roles => :app do
+ run "cd #{current_path};#{rails_env} lib/stalker_worker.rb stop"
+ run "cd #{current_path};#{rails_env} lib/heartbeat.rb stop"
+ end
+
+ desc "Restart Stalker workers and Heartbeat"
+ task :restart, :roles => :app do
+ run "cd #{current_path};#{rails_env} lib/stalker_worker.rb restart"
+ run "cd #{current_path};#{rails_env} lib/heartbeat.rb restart"
+ end
+end
+
+desc "Put up the maintenance page"
+task :disable_web, :roles => :web do
+ require 'haml'
+ template = File.read 'app/views/layouts/maintenance.html.haml'
+ page = Haml::Engine.new(template).render
+ put page, "#{shared_path}/system/maintenance.html", :mode => 0644
+end
diff --git a/config/environment.rb b/config/environment.rb
new file mode 100644
index 0000000..61ae066
--- /dev/null
+++ b/config/environment.rb
@@ -0,0 +1,5 @@
+# Load the rails application
+require File.expand_path('../application', __FILE__)
+
+# Initialize the rails application
+FirstBargain::Application.initialize!
\ No newline at end of file
diff --git a/config/environments/development.rb b/config/environments/development.rb
new file mode 100644
index 0000000..42fd215
--- /dev/null
+++ b/config/environments/development.rb
@@ -0,0 +1,32 @@
+FirstBargain::Application.configure do
+ # Settings specified here will take precedence over those in config/environment.rb
+
+ # In the development environment your application's code is reloaded on
+ # every request. This slows down response time but is perfect for development
+ # since you don't have to restart the webserver when you make code changes.
+ config.cache_classes = false
+
+ # Log error messages when you accidentally call methods on nil.
+ config.whiny_nils = true
+
+ # Show full error reports and disable caching
+ config.consider_all_requests_local = true
+ config.action_controller.perform_caching = false
+
+ # Don't care if the mailer can't send
+ config.action_mailer.raise_delivery_errors = false
+
+ config.action_mailer.delivery_method = :test
+
+ config.active_support.deprecation = :stderr
+
+ config.action_mailer.default_url_options = {host: "firstbargain.dev"}
+
+ # Only use best-standards-support built into browsers
+ config.action_dispatch.best_standards_support = :builtin
+
+ SslRequirement.disable_ssl_check = true
+
+ config.paypal = ActiveMerchant::Billing::PaypalExpressGateway.new(test: true, login: "expedi_1278081544_biz_api1.gmail.com", password: "1278081548", signature: "A0ZeH-pLSu6Oi15OEJkSBy5Gi2NuAbNHcC3bPb4HvOBTSQa3JH2mzsvQ")
+
+end
diff --git a/config/environments/test.rb b/config/environments/test.rb
new file mode 100644
index 0000000..bcb8ab2
--- /dev/null
+++ b/config/environments/test.rb
@@ -0,0 +1,39 @@
+FirstBargain::Application.configure do
+ # Settings specified here will take precedence over those in config/environment.rb
+
+ # The test environment is used exclusively to run your application's
+ # test suite. You never need to work with it otherwise. Remember that
+ # your test database is "scratch space" for the test suite and is wiped
+ # and recreated between test runs. Don't rely on the data there!
+ config.cache_classes = true
+
+ # Log error messages when you accidentally call methods on nil.
+ config.whiny_nils = true
+
+ # Show full error reports and disable caching
+ config.consider_all_requests_local = true
+ config.action_controller.perform_caching = false
+
+ # Disable request forgery protection in test environment
+ config.action_controller.allow_forgery_protection = false
+
+ # Tell Action Mailer not to deliver emails to the real world.
+ # The :test delivery method accumulates sent emails in the
+ # ActionMailer::Base.deliveries array.
+ config.action_mailer.delivery_method = :test
+
+ #config.cache_store = :memory_store
+
+ #config.monthly_win_limit = 3
+
+ config.action_mailer.default_url_options = {host: "www.firstbargain.com"}
+
+ SslRequirement.disable_ssl_check = true
+
+ # Use SQL instead of Active Record's schema dumper when creating the test database.
+ # This is necessary if your schema can't be completely dumped by the schema dumper,
+ # like if you have constraints or database-specific column types
+ # config.active_record.schema_format = :sql
+
+ config.active_support.deprecation = :stderr
+end
diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb
new file mode 100644
index 0000000..59385cd
--- /dev/null
+++ b/config/initializers/backtrace_silencers.rb
@@ -0,0 +1,7 @@
+# Be sure to restart your server when you modify this file.
+
+# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
+# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
+
+# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
+# Rails.backtrace_cleaner.remove_silencers!
diff --git a/config/initializers/cdn.rb b/config/initializers/cdn.rb
new file mode 100644
index 0000000..133e044
--- /dev/null
+++ b/config/initializers/cdn.rb
@@ -0,0 +1,11 @@
+if FirstBargain::Application.config.cdn_enabled
+ ActionController::Base.asset_host = Proc.new do |source, request|
+ if source == true || request == false || source =~ /jquery/
+ nil
+ else
+ if request.ssl? then nil
+ else "http://cdn%d.firstbargain.com" % (source.hash % 4)
+ end
+ end
+ end
+end
\ No newline at end of file
diff --git a/config/initializers/field_with_errors.rb b/config/initializers/field_with_errors.rb
new file mode 100644
index 0000000..3ba57e9
--- /dev/null
+++ b/config/initializers/field_with_errors.rb
@@ -0,0 +1,8 @@
+module ActionView
+ class Base
+ def self.field_error_proc
+ Proc.new { |html_tag, instance| html_tag }
+ end
+ end
+end
+
diff --git a/config/initializers/hoptoad.rb b/config/initializers/hoptoad.rb
new file mode 100644
index 0000000..4dabd58
--- /dev/null
+++ b/config/initializers/hoptoad.rb
@@ -0,0 +1,3 @@
+HoptoadNotifier.configure do |config|
+ config.api_key = ENV["HOPTOAD_KEY"]
+end
diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb
new file mode 100644
index 0000000..d531b8b
--- /dev/null
+++ b/config/initializers/inflections.rb
@@ -0,0 +1,10 @@
+# Be sure to restart your server when you modify this file.
+
+# Add new inflection rules using the following format
+# (all these examples are active by default):
+# ActiveSupport::Inflector.inflections do |inflect|
+# inflect.plural /^(ox)$/i, '\1en'
+# inflect.singular /^(ox)en/i, '\1'
+# inflect.irregular 'person', 'people'
+# inflect.uncountable %w( fish sheep )
+# end
diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb
new file mode 100644
index 0000000..da902f4
--- /dev/null
+++ b/config/initializers/mime_types.rb
@@ -0,0 +1,5 @@
+# Be sure to restart your server when you modify this file.
+
+# Add new mime types for use in respond_to blocks:
+# Mime::Type.register "text/richtext", :rtf
+# Mime::Type.register_alias "text/html", :iphone
\ No newline at end of file
diff --git a/config/initializers/money_extension.rb b/config/initializers/money_extension.rb
new file mode 100644
index 0000000..6e34291
--- /dev/null
+++ b/config/initializers/money_extension.rb
@@ -0,0 +1,39 @@
+# This code was not produced by FirstBargain. I found it somewhere on the web, but I cannot find the original author.
+
+require 'money'
+
+module ActiveRecord #:nodoc:
+ module Acts #:nodoc:
+ module Money #:nodoc:
+ module ClassMethods
+ def money(name, options = {})
+ allow_nil = options.has_key?(:allow_nil) ? options.delete(:allow_nil) : true
+ options = {:cents => "#{name}_in_cents".to_sym }.merge(options)
+ mapping = [[options[:cents], 'cents']]
+ mapping << [options[:currency].to_s, 'currency'] if options[:currency]
+ composed_of name, :class_name => 'Money', :mapping => mapping, :allow_nil => allow_nil,
+ :converter => lambda{ |m|
+ if !allow_nil && m.nil?
+ currency = options[:currency] || ::Money.default_currency
+ m = ::Money.new(0, currency)
+ end
+ m.to_money
+ },
+ :constructor => lambda{ |*args|
+ cents, currency = args
+ cents ||= 0
+ currency ||= ::Money.default_currency
+ ::Money.new(cents, currency)
+ }
+
+ define_method "#{name}_with_cleanup=" do |amount|
+ send "#{name}_without_cleanup=", amount.blank? ? nil : amount.to_money
+ end
+ alias_method_chain "#{name}=", :cleanup
+ end
+ end
+ end
+ end
+end
+
+ActiveRecord::Base.extend ActiveRecord::Acts::Money::ClassMethods
diff --git a/config/initializers/redis.rb b/config/initializers/redis.rb
new file mode 100644
index 0000000..a9de7c5
--- /dev/null
+++ b/config/initializers/redis.rb
@@ -0,0 +1 @@
+$redis = Redis.new(:host => 'localhost', :port => 6379)
\ No newline at end of file
diff --git a/config/initializers/secret_token.rb b/config/initializers/secret_token.rb
new file mode 100644
index 0000000..c2efbb1
--- /dev/null
+++ b/config/initializers/secret_token.rb
@@ -0,0 +1,7 @@
+# Be sure to restart your server when you modify this file.
+
+# Your secret key for verifying the integrity of signed cookies.
+# If you change this key, all old signed cookies will become invalid!
+# Make sure the secret is at least 30 characters and all random,
+# no regular words or you'll be exposed to dictionary attacks.
+FirstBargain::Application.config.secret_token = ENV["SECRET_TOKEN"]
diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb
new file mode 100644
index 0000000..59bf339
--- /dev/null
+++ b/config/initializers/session_store.rb
@@ -0,0 +1,8 @@
+# Be sure to restart your server when you modify this file.
+
+FirstBargain::Application.config.session_store :cookie_store, :key => '_FirstBargain_session'
+
+# Use the database for sessions instead of the cookie-based default,
+# which shouldn't be used to store highly confidential information
+# (create the session table with "rake db:sessions:create")
+# FirstBargain::Application.config.session_store :active_record_store
diff --git a/config/locales/en.yml b/config/locales/en.yml
new file mode 100644
index 0000000..4ae9e49
--- /dev/null
+++ b/config/locales/en.yml
@@ -0,0 +1,136 @@
+# Sample localization file for English. Add more files in this directory for other locales.
+# See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
+
+en:
+ authlogic:
+ error_messages:
+ login_invalid: "should use only letters and numbers please."
+ date:
+ order:
+ - :month
+ - :day
+ - :year
+ activemodel:
+ errors:
+ models:
+ invitation:
+ attributes:
+ emails:
+ invalid: "are not valid"
+ length: "may be entered up to five at a time"
+ activerecord:
+ models:
+ bid_bot: "Bid Assistant"
+ errors:
+ models:
+ bid_bot:
+ attributes:
+ base:
+ active_bot_limit: "You may only activate one bid assistant at a time."
+ bids_left:
+ not_in_range: "must be between 3 and 50."
+ need_more_bids: "is incorrect. You don't have enough Bid Credits left in your account."
+ bid_from:
+ greater_than_or_equal_to: "price must be greater than or equal to 0."
+ account:
+ attributes:
+ base:
+ ip_taken: "Your IP seems to be registered with another account. We only permit one account per household."
+ email:
+ invalid: "domain is banned."
+ birth_date:
+ invalid: "must be greater than 18 years ago"
+ username:
+ limited: "can only be changed once a month."
+ auction:
+ attributes:
+ ending_at:
+ past: "must be in the future"
+ coupon_use:
+ attributes:
+ coupon_id:
+ taken: "has already been used by you"
+ blank: "is invalid"
+ auction_order:
+ attributes:
+ base:
+ did_not_win: "You did not win this auction."
+ already_redeemed: "This auction was already redeemed."
+ expired: "Sorry, auctions over 7 days old cannot be redeemed."
+ reward_order:
+ attributes:
+ point_discount:
+ invalid: "is not correct"
+ buy_now_order:
+ attributes:
+ auction:
+ invalid: "is not eligible for BuyNow. You may have just won this auction, or the 24-hour time frame to BuyNow may have expired."
+ bid:
+ attributes:
+ base:
+ daily_active_auctions_limit: "Please wait until one of the auctions you are currently participating in has ended. By placing a bid on this item, you might exceed your daily 3 win limit."
+ monthly_active_auctions_limit: "Please wait until one of the auctions you are currently participating in has ended. By placing a bid on this item, you might exceed your monthly 10 win limit."
+ auction_ended: "This auction has ended."
+ need_more_bids: "You don't have any bids left. Please purchase bid credits to participate in an auction."
+ bid_twice: "You just placed a bid; you're currently the highest bidder."
+ daily_win_limit_reached: "You've reached your daily win limit. FirstBargain allows customers to win up to 3 times a day. This gives everyone a fair chance to win."
+ monthly_win_limit_reached: "You've reached your monthly win limit. FirstBargain allows customers to win up to 10 times a month. This gives everyone a fair chance to win."
+ buy_now_used: "You've already exercised the 'Buy Now' option."
+ item_too_expensive: "Only 1 win of the same product with a retail price over $200 is allowed per calendar month."
+ investment:
+ overinvested: "It would be cheaper for you to 'Buy Now' this item than to continue bidding on it."
+ messages:
+ invalid: "contains bad characters or isn't formatted correctly."
+ mx_invalid: "domain doesn't seem to exist. Check your spelling."
+ time:
+ formats:
+ short_date_time: "%m/%d/%y - %I:%M%p"
+ order: "%m/%d/%y at %I:%M%p"
+ admin: "%m/%d/%y - %I:%M:%S%p"
+ auction: "%m/%d %I:%M %p"
+ bid: "%r"
+ attributes:
+ credits: "Bids"
+ bonuses: "Bonus Bids"
+ birth_date: "Date of birth"
+ registration_ip: "Registration IP"
+ current_login_ip: "Current login IP"
+ bids_left: "Number of bids"
+ bids:
+ beginner_limit: "You can only bid on one beginner auction at a time."
+ not_beginner: "Beginner auctions are reserved for customers who have not won anything yet."
+ flash:
+ account:
+ created: "Thank you for registering. Please check your email to verify your account."
+ updated: "Account updated!"
+ activations:
+ activated: "Thank you for verifying your account."
+ account_not_found: "Invalid verification code. If you think this is a mistake, contact us."
+ already_verified: "Your account is already verified."
+ created: "Activation email was resent. Check your spam folder if needed."
+ email_flagged: "We couldn't resend your activation link because your email address is flagged. Please contact us at support@firstbargain.com for further help, and add us to your contact list to ensure we can reach you."
+ addresses:
+ created: "Address saved!"
+ deleted: "Address removed."
+ bids:
+ without_xhr: "You made a bid successfully, but it seems you don't have JavaScript fully enabled. Please check your JavaScript configuration."
+ contact:
+ created: "Thank you for contacting us! We will get back to you within 24 hours."
+ email_flagged: "We could not receive your message because the email address you provided is either invalid or has blacklisted us for spam. Please provide a different email, or use your own email program to send us a message. Sorry for the inconvenience."
+ coupons:
+ created: "You got %{count} bonus bids!"
+ invitations:
+ created: "Invitations sent"
+ email_flagged: "We couldn't deliver your invites. Some of the emails you entered either do not exist or have strict spam filters. Please share your invitation link manually."
+ password_reset:
+ no_account: "No user was found with that email address."
+ sent: "Instructions to reset your password have been emailed to you."
+ success: "Password successfully updated"
+ expired: "Your reset request has expired. Try requesting another reset."
+ email_flagged: "Your email address is flagged; please contact us at support@firstbargain.com directly and add us to your contact list to ensure we can reach you."
+ session:
+ expired_on_registration: "Sorry, but your session has expired. Care to try again?"
+ expired: "Your login session has expired. Please try your last action again."
+ expired_order: "Your session has expired. Please try re-adding your item."
+ must_be_logged_out: "You must be logged out to access this page."
+ deleted: "You've successfully logged out. Goodbye."
\ No newline at end of file
diff --git a/config/newrelic.yml b/config/newrelic.yml
new file mode 100644
index 0000000..2bb1aea
--- /dev/null
+++ b/config/newrelic.yml
@@ -0,0 +1,233 @@
+#
+# This file configures the New Relic RPM Agent. New Relic RPM monitors
+# Rails and Java applications with deep visibility and low overhead. For more
+# information, visit www.newrelic.com.
+#
+# Generated August 15, 2010
+#
+# This configuration file is custom generated for Expedient Shopping
+
+# Here are the settings that are common to all environments:
+common: &default_settings
+ # ============================== LICENSE KEY ===============================
+
+ # You must specify the license key associated with your New Relic
+ # account. This key binds your Agent's data to your account in the
+ # New Relic RPM service.
+ license_key: 'SECRET'
+
+ # Agent Enabled (Rails Only)
+ # Use this setting to force the agent to run or not run.
+ # Default is 'auto' which means the agent will install and run only
+ # if a valid dispatcher such as Mongrel is running. This prevents
+ # it from running with Rake or the console. Set to false to
+ # completely turn the agent off regardless of the other settings.
+ # Valid values are true, false and auto.
+ # agent_enabled: auto
+
+ # Application Name
+ # Set this to be the name of your application as you'd like it show
+ # up in RPM. RPM will then auto-map instances of your application
+ # into a RPM "application" on your home dashboard page. If you want
+ # to map this instance into multiple apps, like "AJAX Requests" and
+ # "All UI" then specify a semicolon separated list of up to three
+ # distinct names. If you comment this out, it defaults to the
+ # capitalized RAILS_ENV (i.e., Production, Staging, etc)
+ #app_name: My Application
+
+ # When "true", the agent collects performance data about your
+ # application and reports this data to the NewRelic RPM service at
+ # newrelic.com. This global switch is normally overridden for each
+ # environment below. (formerly called 'enabled')
+ monitor_mode: true
+
+ # Developer mode should be off in every environment but
+ # development as it has very high overhead in memory.
+ developer_mode: false
+
+ # The newrelic agent generates its own log file to keep its logging
+ # information separate from that of your application. Specify its
+ # log level here.
+ log_level: info
+
+ # The newrelic agent communicates with the RPM service via http by
+ # default. If you want to communicate via https to increase
+ # security, then turn on SSL by setting this value to true. Note,
+ # this will result in increased CPU overhead to perform the
+ # encryption involved in SSL communication, but this work is done
+ # asynchronously to the threads that process your application code,
+ # so it should not impact response times.
+ ssl: false
+
+ # EXPERIMENTAL: enable verification of the SSL certificate sent by
+ # the server. This setting has no effect unless SSL is enabled
+ # above. This may block your application. Only enable it if the data
+ # you send us needs end-to-end verified certificates.
+ #
+ # This means we cannot cache the DNS lookup, so each request to the
+ # RPM service will perform a lookup. It also means that we cannot
+ # use a non-blocking lookup, so in a worst case, if you have DNS
+ # problems, your app may block indefinitely.
+ # verify_certificate: true
+
+ # Set your application's Apdex threshold value with the 'apdex_t'
+ # setting, in seconds. The apdex_t value determines the buckets used
+ # to compute your overall Apdex score.
+ # Requests that take less than apdex_t seconds to process will be
+ # classified as Satisfying transactions; more than apdex_t seconds
+ # as Tolerating transactions; and more than four times the apdex_t
+ # value as Frustrating transactions.
+ # For more about the Apdex standard, see
+ # http://support.newrelic.com/faqs/general/apdex
+
+ apdex_t: 0.5
+
+ # Proxy settings for connecting to the RPM server.
+ #
+ # If a proxy is used, the host setting is required. Other settings
+ # are optional. Default port is 8080.
+ #
+ # proxy_host: hostname
+ # proxy_port: 8080
+ # proxy_user:
+ # proxy_pass:
+
+
+ # Tells transaction tracer and error collector (when enabled)
+ # whether or not to capture HTTP params. When true, frameworks can
+ # exclude HTTP parameters from being captured.
+ # Rails: the RoR filter_parameter_logging excludes parameters
+ # Java: create a config setting called "ignored_params" and set it to
+ # a comma separated list of HTTP parameter names.
+ # ex: ignored_params: credit_card, ssn, password
+ capture_params: false
+
+
+ # Transaction tracer captures deep information about slow
+ # transactions and sends this to the RPM service once a
+ # minute. Included in the transaction is the exact call sequence of
+ # the transactions including any SQL statements issued.
+ transaction_tracer:
+
+ # Transaction tracer is enabled by default. Set this to false to
+ # turn it off. This feature is only available at the Silver and
+ # above product levels.
+ enabled: true
+
+ # Threshold in seconds for when to collect a transaction
+ # trace. When the response time of a controller action exceeds
+ # this threshold, a transaction trace will be recorded and sent to
+ # RPM. Valid values are any float value, or (default) "apdex_f",
+ # which will use the threshold for an dissatisfying Apdex
+ # controller action - four times the Apdex T value.
+ transaction_threshold: apdex_f
+
+ # When transaction tracer is on, SQL statements can optionally be
+ # recorded. The recorder has three modes, "off" which sends no
+ # SQL, "raw" which sends the SQL statement in its original form,
+ # and "obfuscated", which strips out numeric and string literals
+ record_sql: obfuscated
+
+ # Threshold in seconds for when to collect stack trace for a SQL
+ # call. In other words, when SQL statements exceed this threshold,
+ # then capture and send to RPM the current stack trace. This is
+ # helpful for pinpointing where long SQL calls originate from
+ stack_trace_threshold: 0.500
+
+ # Determines whether the agent will capture query plans for slow
+ # SQL queries. Only supported in mysql and postgres. Should be
+ # set to false when using other adapters.
+ # explain_enabled: true
+
+ # Threshold for query execution time below which query plans will not
+ # not be captured. Relevant only when `explain_enabled` is true.
+ # explain_threshold: 0.5
+
+ # Error collector captures information about uncaught exceptions and
+ # sends them to RPM for viewing
+ error_collector:
+
+ # Error collector is enabled by default. Set this to false to turn
+ # it off. This feature is only available at the Silver and above
+ # product levels
+ enabled: true
+
+ # Rails Only - tells error collector whether or not to capture a
+ # source snippet around the place of the error when errors are View
+ # related.
+ capture_source: true
+
+ # To stop specific errors from reporting to RPM, set this property
+ # to comma separated values. Default is to ignore routing errors
+ # which are how 404's get triggered.
+ #
+ ignore_errors: ActionController::RoutingError
+
+ # (Advanced) Uncomment this to ensure the cpu and memory samplers
+ # won't run. Useful when you are using the agent to monitor an
+ # external resource
+ # disable_samplers: true
+
+ # If you aren't interested in visibility in these areas, you can
+ # disable the instrumentation to reduce overhead.
+ #
+ # disable_view_instrumentation: true
+ # disable_activerecord_instrumentation: true
+ # disable_memcache_instrumentation: true
+ # disable_dj: true
+
+ # Certain types of instrumentation such as GC stats will not work if
+ # you are running multi-threaded. Please let us know.
+ # multi_threaded = false
+
+# Application Environments
+# ------------------------------------------
+# Environment specific settings are in this section.
+# For Rails applications, RAILS_ENV is used to determine the environment
+# For Java applications, pass -Dnewrelic.environment to set
+# the environment
+
+# NOTE if your application has other named environments, you should
+# provide newrelic configuration settings for these environments here.
+
+development:
+ <<: *default_settings
+ # Turn off communication to RPM service in development mode (also
+ # 'enabled').
+ # NOTE: for initial evaluation purposes, you may want to temporarily
+ # turn the agent on in development mode.
+ monitor_mode: false
+
+ # Rails Only - when running in Developer Mode, the New Relic Agent will
+ # present performance information on the last 100 transactions you have
+ # executed since starting the mongrel.
+ # NOTE: There is substantial overhead when running in developer mode.
+ # Do not use for production or load testing.
+ developer_mode: true
+
+ # Enable textmate links
+ textmate: true
+
+ # Needed for Pow! server
+ #agent_enabled: true
+
+test:
+ <<: *default_settings
+ # It almost never makes sense to turn on the agent when running
+ # unit, functional or integration tests or the like.
+ monitor_mode: false
+
+# Turn on the agent in production for 24x7 monitoring. NewRelic
+# testing shows an average performance impact of < 5 ms per
+# transaction, you you can leave this on all the time without
+# incurring any user-visible performance degradation.
+production:
+ <<: *default_settings
+ monitor_mode: true
+
+# Many applications have a staging environment which behaves
+# identically to production. Support for that environment is provided
+# here. By default, the staging environment has the agent turned on.
+staging:
+ <<: *default_settings
+ monitor_mode: false
diff --git a/config/routes.rb b/config/routes.rb
new file mode 100644
index 0000000..ddd2e17
--- /dev/null
+++ b/config/routes.rb
@@ -0,0 +1,80 @@
+FirstBargain::Application.routes.draw do
+
+ get 'poller' => 'poller#index'
+ get 'poller/:id' => 'poller#show'
+ get 'promos' => 'widget#index'
+ get 'promos/:id' => "widget#show"
+
+ post "orders/ccbill" => "ccbill#create"
+
+ resources :auctions, only: [:index, :show] do
+ resources :bids, only: :create
+ resource :bid_bot, only: :create
+ get :winners, on: :collection
+ end
+
+ resources :orders, :except => [:show, :destroy] do
+ post :confirm, on: :collection
+ get :paypal, on: :collection
+ get :success, on: :collection
+ get :failure, on: :collection
+ end
+
+ resources :bookmarks, only: [:index, :create, :destroy]
+ resources :addresses, :except => [:show, :update, :edit]
+ resources :invitations, only: [:index, :create]
+ get 'bids' => 'bid_packs#new'
+ resources :products, only: [:index, :show]
+ resources :coupons, only: [:new, :create]
+ resources :landings, only: :show do
+ get :promo, on: :collection
+ get :category, on: :member
+ end
+
+ resource :session, only: [:new, :create, :destroy]
+ resource :account, :except => :destroy do
+ get :welcome
+ end
+ resource :password_reset, :except => [:destroy, :show]
+ resource :contact, only: [:show, :create]
+ resource :activation, only: [:new, :create]
+
+ resource :splash, only: [:show, :create]
+
+ namespace :admin do
+ resources :featured_auctions, :products, :auctions, :coupons, :categories, :analytics
+ resources :orders do
+ put :ship, on: :member
+ put :void, on: :member
+ put :approve, on: :member
+ put :refund, on: :member
+ end
+ resources :accounts do
+ put :adjust, on: :member
+ put :flag, on: :member
+ put :subscribe, on: :member
+ get :online, on: :collection
+ end
+ root :to => "auctions#index"
+ end
+
+ get 'privacy' => 'static#privacy'
+ get 'about' => 'static#about'
+ get 'tutorial' => 'static#tutorial'
+ get 'tips' => 'static#tips'
+ get 'tos' => 'static#tos'
+ get 'returns' => 'static#returns'
+ get 'rewards' => 'static#rewards'
+ get 'guarantee' => 'static#guarantee'
+ get 'rules' => 'static#rules'
+
+ get 'faq/new_user' => 'static#faq_new_user'
+ get 'faq/auctions' => 'static#faq_auctions'
+ get 'faq/account' => 'static#faq_account'
+ get 'faq/shipping' => 'static#faq_shipping'
+ get 'faq/payment' => 'static#faq_payment'
+ get 'faq' => 'static#faq'
+
+ root :to => "auctions#index"
+
+end
diff --git a/config/schedule.rb b/config/schedule.rb
new file mode 100644
index 0000000..be44fb1
--- /dev/null
+++ b/config/schedule.rb
@@ -0,0 +1,41 @@
+# Use this file to easily define all of your cron jobs.
+#
+# It's helpful, but not entirely necessary to understand cron before proceeding.
+# http://en.wikipedia.org/wiki/Cron
+
+# Example:
+#
+# set :output, "/path/to/my/cron_log.log"
+#
+# every 2.hours do
+# command "/usr/bin/some_great_command"
+# runner "MyModel.some_method"
+# rake "some:great:rake:task"
+# end
+#
+# every 4.days do
+# runner "AnotherModel.prune_old_records"
+# end
+
+# Learn more: http://github.com/javan/whenever
+
+## Email daily report at 12:01 am (Linux time zone, which is PT)
+every 1.days, :at => "12:01 am" do
+ runner "StaffMailer.daily_activity_report.deliver"
+end
+
+## Email weekly report at 12:01 am on Sunday (Linux time zone, which is PT)
+every :sunday, :at => "12:01 am" do
+ runner "StaffMailer.weekly_activity_report.deliver"
+end
+
+## Sync Mailchimp at 12:03 AM PT
+every 1.days, :at => "12:03 am" do
+ runner "Account.sync_mailchimp"
+end
+
+## Expire Redis bid bot jobs cache
+every 1.days, :at => "1:00 am" do
+ runner "Auction.expire_redis_job_cache_for_last_24_hours"
+end
+
diff --git a/config/stalker_jobs.rb b/config/stalker_jobs.rb
new file mode 100644
index 0000000..372a26a
--- /dev/null
+++ b/config/stalker_jobs.rb
@@ -0,0 +1,40 @@
+require File.expand_path("../environment", __FILE__)
+require 'net/http'
+
+job "bid_bot" do |args|
+ if $redis.sismember("auction_#{args['id']}_job_ids", args["redis_job_id"])
+ a = Auction.find(args["id"])
+ BidBot.pool(a).any? do |bot|
+ bot.bid!
+ end
+ end
+end
+
+job "emails.won_auction" do |args|
+ a = Auction.find(args["id"])
+ if a.finished?
+ CustomerMailer.won_auction(args["id"]).deliver if a.account_id?
+ else
+ t = a.ending_at + 7.minutes
+ Stalker.enqueue("emails.won_auction", args, {delay: (t - Time.now).round})
+ end
+end
+
+job "emails.customer" do |args|
+ begin
+ m = CustomerMailer.public_send(args["method"], args["params"])
+ m.deliver
+ rescue Net::SMTPFatalError
+ Account.find_by_email(m.to.first).try(:update_attribute, :good_email, false)
+ end
+end
+
+job "emails.contact_form" do |hash|
+ StaffMailer.inquiry(hash).deliver
+end
+
+# CCBill shipment confirmations
+job "Order" do |args|
+ o = Order.find(args["order_id"])
+ o.create_fulfillment! if o.requires_shipping?
+end
diff --git a/db/schema.rb b/db/schema.rb
new file mode 100644
index 0000000..bcca518
--- /dev/null
+++ b/db/schema.rb
@@ -0,0 +1,285 @@
+# This file is auto-generated from the current state of the database. Instead
+# of editing this file, please use the migrations feature of Active Record to
+# incrementally modify your database, and then regenerate this schema definition.
+#
+# Note that this schema.rb definition is the authoritative source for your
+# database schema. If you need to create the application database on another
+# system, you should be using db:schema:load, not running all the migrations
+# from scratch. The latter is a flawed and unsustainable approach (the more migrations
+# you'll amass, the slower it'll run and the greater likelihood for issues).
+#
+# It's strongly recommended to check this file into your version control system.
+
+ActiveRecord::Schema.define(:version => 20110802152801) do
+
+ create_table "accounts", :force => true do |t|
+ t.integer "credits", :default => 0
+ t.integer "bonuses", :default => 0
+ t.integer "points_in_cents", :default => 0
+ t.date "birth_date"
+ t.boolean "verified", :default => false
+ t.string "username", :null => false
+ t.string "email", :null => false
+ t.string "encrypted_password", :null => false
+ t.string "password_salt", :null => false
+ t.string "persistence_token", :null => false
+ t.string "single_access_token", :null => false
+ t.string "perishable_token", :null => false
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.integer "parent_id"
+ t.boolean "has_purchased", :default => false
+ t.integer "cumulative_credits", :default => 0
+ t.integer "cumulative_bonuses", :default => 0
+ t.boolean "active", :default => true
+ t.string "registration_ip"
+ t.string "current_login_ip"
+ t.string "last_login_ip"
+ t.datetime "last_username_change"
+ t.boolean "good_email", :default => true
+ t.string "source"
+ t.datetime "last_request_at"
+ t.text "notes"
+ t.boolean "subscribed", :default => false, :null => false
+ t.string "utm_medium"
+ t.string "utm_source"
+ t.string "utm_campaign"
+ t.string "utm_term"
+ t.string "utm_content"
+ t.boolean "bids_purchased", :default => false
+ end
+
+ add_index "accounts", ["email"], :name => "index_accounts_on_email", :unique => true
+ add_index "accounts", ["perishable_token"], :name => "index_accounts_on_perishable_token", :unique => true
+ add_index "accounts", ["persistence_token"], :name => "index_accounts_on_persistence_token", :unique => true
+ add_index "accounts", ["registration_ip"], :name => "index_accounts_on_registration_ip"
+ add_index "accounts", ["single_access_token"], :name => "index_accounts_on_single_access_token", :unique => true
+ add_index "accounts", ["username"], :name => "index_accounts_on_login", :unique => true
+
+ create_table "addresses", :force => true do |t|
+ t.string "name"
+ t.string "address"
+ t.string "address_2"
+ t.string "city"
+ t.string "state"
+ t.string "zip"
+ t.string "country", :default => "US"
+ t.string "phone"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.integer "account_id"
+ t.string "label"
+ end
+
+ add_index "addresses", ["account_id"], :name => "index_addresses_on_account_id"
+
+ create_table "approvals", :force => true do |t|
+ t.string "ip"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "approvals", ["ip"], :name => "index_approvals_on_ip", :unique => true
+
+ create_table "auctions", :force => true do |t|
+ t.integer "product_id"
+ t.integer "account_id"
+ t.datetime "ending_at"
+ t.integer "price_increment_in_cents", :default => 1
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.boolean "redeemed", :default => false
+ t.integer "going_price_in_cents", :default => 0
+ t.boolean "hot", :default => false
+ t.integer "retail_price_in_cents"
+ t.boolean "is_buy_now", :default => false
+ t.integer "timer_reset", :default => 30
+ t.integer "investment_id"
+ t.boolean "beginner", :default => false
+ t.boolean "finished", :default => false, :null => false
+ end
+
+ add_index "auctions", ["account_id"], :name => "index_auctions_on_account_id"
+ add_index "auctions", ["ending_at"], :name => "index_auctions_on_ending_at"
+
+ create_table "bid_bots", :force => true do |t|
+ t.integer "account_id"
+ t.integer "auction_id"
+ t.integer "bid_from_in_cents", :default => 0
+ t.integer "bids_left"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "bid_bots", ["auction_id", "account_id"], :name => "index_bid_bots_on_auction_id_and_account_id", :unique => true
+ add_index "bid_bots", ["auction_id", "bids_left", "bid_from_in_cents", "account_id"], :name => "by_pool"
+
+ create_table "bids", :force => true do |t|
+ t.integer "account_id"
+ t.integer "auction_id"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.boolean "paid", :default => true
+ t.string "username"
+ t.boolean "botted", :default => false
+ end
+
+ add_index "bids", ["auction_id"], :name => "index_bids_on_auction_id"
+
+ create_table "bookmarks", :force => true do |t|
+ t.integer "account_id"
+ t.integer "auction_id"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "bookmarks", ["account_id"], :name => "index_bookmarks_on_account_id"
+
+ create_table "categories", :force => true do |t|
+ t.string "name"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ create_table "coupon_uses", :force => true do |t|
+ t.integer "account_id"
+ t.integer "coupon_id"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "coupon_uses", ["account_id", "coupon_id"], :name => "index_coupon_uses_on_account_id_and_coupon_id", :unique => true
+
+ create_table "coupons", :force => true do |t|
+ t.string "code"
+ t.string "summary"
+ t.datetime "ends_at"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.integer "bonuses"
+ t.integer "uses_left"
+ end
+
+ add_index "coupons", ["code"], :name => "index_coupons_on_code"
+
+ create_table "featured_auctions", :force => true do |t|
+ t.integer "auction_id"
+ t.string "name"
+ t.text "description"
+ t.string "image_url"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ create_table "investments", :force => true do |t|
+ t.integer "account_id"
+ t.integer "amount_in_cents", :default => 0
+ t.integer "credits_used", :default => 0
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.integer "auction_id"
+ t.boolean "expired", :default => false
+ t.integer "bonuses_used", :default => 0
+ end
+
+ add_index "investments", ["account_id", "auction_id"], :name => "index_investments_on_account_id_and_auction_id", :unique => true
+
+ create_table "orders", :force => true do |t|
+ t.string "state", :default => "pending"
+ t.integer "account_id"
+ t.string "ip_address"
+ t.string "first_name"
+ t.string "last_name"
+ t.string "card_type"
+ t.date "card_expires_on"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.datetime "shipped_at"
+ t.string "confirmation"
+ t.string "shipping_name"
+ t.string "shipping_address"
+ t.string "shipping_address_2"
+ t.string "shipping_city"
+ t.string "shipping_state"
+ t.string "shipping_country", :default => "US"
+ t.string "shipping_phone"
+ t.string "billing_address"
+ t.string "billing_address_2"
+ t.string "billing_city"
+ t.string "billing_state"
+ t.string "billing_country", :default => "US"
+ t.string "billing_phone"
+ t.string "shipping_zip"
+ t.string "billing_zip"
+ t.string "express_token"
+ t.string "express_payer_id"
+ t.integer "subtotal_in_cents"
+ t.integer "shipping_price_in_cents"
+ t.integer "point_discount_in_cents"
+ t.integer "buyable_id"
+ t.string "type"
+ t.integer "sales_tax_in_cents", :default => 0
+ t.string "tracking_id", :default => ""
+ t.string "shipping_company", :default => ""
+ end
+
+ add_index "orders", ["account_id"], :name => "index_orders_on_account_id"
+ add_index "orders", ["state"], :name => "index_orders_on_state"
+
+ create_table "pictures", :force => true do |t|
+ t.integer "product_id"
+ t.string "data"
+ t.string "summary"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "pictures", ["product_id"], :name => "index_pictures_on_product_id"
+
+ create_table "products", :force => true do |t|
+ t.string "name"
+ t.string "summary"
+ t.text "description"
+ t.integer "retail_price_in_cents", :default => 0
+ t.string "main_picture"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.integer "shipping_price_in_cents", :default => 0
+ t.integer "max_discount_in_cents", :default => 0
+ t.boolean "visible", :default => true
+ t.integer "bonuses", :default => 0
+ t.boolean "requires_shipping", :default => true
+ t.integer "category_id"
+ t.boolean "widget_worthy", :default => false
+ t.integer "tax_in_cents", :default => 0
+ t.integer "cost_in_cents", :default => 0
+ t.boolean "discontinued", :default => false
+ end
+
+ add_index "products", ["category_id"], :name => "index_products_on_category_id"
+ add_index "products", ["visible"], :name => "index_products_on_visible"
+
+ create_table "transactions", :force => true do |t|
+ t.integer "order_id"
+ t.integer "amount_in_cents", :default => 0
+ t.boolean "success"
+ t.string "authorization"
+ t.string "message"
+ t.string "action"
+ t.text "params"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "transactions", ["order_id"], :name => "index_transactions_on_order_id"
+
+ create_table "viewers", :force => true do |t|
+ t.string "login"
+ t.string "crypted_password"
+ t.string "password_salt"
+ t.string "persistence_token"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+end
diff --git a/db/seeds.rb b/db/seeds.rb
new file mode 100644
index 0000000..10a7ef0
--- /dev/null
+++ b/db/seeds.rb
@@ -0,0 +1,8 @@
+# This file should contain all the record creation needed to seed the database with its default values.
+# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
+#
+# Examples:
+#
+# cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }])
+# Mayor.create(:name => 'Daley', :city => cities.first)
+Factory :featured_auction
\ No newline at end of file
diff --git a/doc/CCBill_Background_Post_Users_Guide.pdf b/doc/CCBill_Background_Post_Users_Guide.pdf
new file mode 100644
index 0000000..73bc435
Binary files /dev/null and b/doc/CCBill_Background_Post_Users_Guide.pdf differ
diff --git a/doc/CCBill_SMS_Users_Guide.pdf b/doc/CCBill_SMS_Users_Guide.pdf
new file mode 100644
index 0000000..cd06265
Binary files /dev/null and b/doc/CCBill_SMS_Users_Guide.pdf differ
diff --git a/doc/README_FOR_APP b/doc/README_FOR_APP
new file mode 100644
index 0000000..fe41f5c
--- /dev/null
+++ b/doc/README_FOR_APP
@@ -0,0 +1,2 @@
+Use this README file to introduce your application and point to useful places in the API for learning more.
+Run "rake doc:app" to generate API documentation for your models, controllers, helpers, and libraries.
diff --git a/doc/SMS_Addendum_Subscription_Tangibles.pdf b/doc/SMS_Addendum_Subscription_Tangibles.pdf
new file mode 100644
index 0000000..bc7959e
Binary files /dev/null and b/doc/SMS_Addendum_Subscription_Tangibles.pdf differ
diff --git a/lib/authorize_net.rb b/lib/authorize_net.rb
new file mode 100644
index 0000000..6595b8c
--- /dev/null
+++ b/lib/authorize_net.rb
@@ -0,0 +1,76 @@
+module AuthorizeNet
+
+ module ClassMethods
+ attr_accessor :card_number, :card_verification
+ before_validation :set_shipping_from_billing
+ validate :validate_card, on: :create, :unless => :paypal?
+ validates :billing_phone, :billing_address, :billing_city, :billing_state, :billing_zip, :presence => true, :unless => :paypal?, on: :create
+ validates :shipping_name, :shipping_phone, :shipping_address, :shipping_city, :shipping_state, :shipping_zip, presence: true, if: -> {requires_shipping? and not paypal?}, on: :create
+ end
+
+ def self.included(klass)
+ klass.class_eval do
+ private :set_shipping_from_billing, :validate_card, :standard_purchase_options
+ end
+ end
+
+ def set_shipping_from_billing
+ if different_shipping == "0" and not paypal?
+ %w[name address address_2 city state zip country phone].each do |sym|
+ b = public_send("billing_#{sym}")
+ public_send("shipping_#{sym}=", b)
+ end
+ end
+ end
+
+ def validate_card
+ credit_card.errors.full_messages.each {|msg| errors[:base] << msg} if credit_card.invalid?
+ end
+
+ def credit_card
+ @credit_card ||= ActiveMerchant::Billing::CreditCard.new(
+ :type => card_type,
+ :number => card_number,
+ :verification_value => card_verification,
+ :month => card_expires_on.try(:month),
+ :year => card_expires_on.try(:year),
+ :first_name => first_name,
+ :last_name => last_name
+ )
+ end
+
+ def standard_purchase_options
+ b = {
+ :name => billing_name,
+ :address1 => billing_address,
+ :address2 => billing_address_2,
+ :city => billing_city,
+ :state => billing_state,
+ :zip => billing_zip,
+ :country => billing_country,
+ :phone => billing_phone
+ }
+ s = if requires_shipping? then {
+ :name => shipping_name,
+ :address1 => shipping_address,
+ :address2 => shipping_address_2,
+ :city => shipping_city,
+ :state => shipping_state,
+ :zip => shipping_zip,
+ :country => shipping_country,
+ :phone => shipping_phone
+ }
+ else b
+ end
+ {
+ :order_id => id,
+ :ip => ip_address,
+ :customer => account.username,
+ :description => contents,
+ :email => account.email,
+ :billing_address => b,
+ :shipping_address => s
+ }
+ end
+
+end
\ No newline at end of file
diff --git a/lib/ccbill.rb b/lib/ccbill.rb
new file mode 100644
index 0000000..4d916cd
--- /dev/null
+++ b/lib/ccbill.rb
@@ -0,0 +1,115 @@
+require 'digest/md5'
+require 'net/https'
+
+module CCBill
+ CCBILL_PACKS = {30 => "9133", 50 => "6048", 100 => "3969", 200 => "3725"}.freeze
+
+ def ccbill_url
+ p = {
+ :clientAccnum => "942370",
+ :uid => account.single_access_token,
+ :buyable => "#{kind}-#{buyable_id}",
+ :email => account.email,
+ :customTaxPrice => sales_tax.to_f,
+ :customShippingPrice => shipping_price.to_f,
+ :customOrderId => (1 + rand(999998)),
+ :customSkuCode => buyable_id,
+ :customProductName => contents,
+ :customUnitPrice => subtotal.to_f,
+ :customQuantity => 1,
+ :referer => "organic",
+ }
+ if is_a? BidOrder
+ p[:clientSubacc] = "0000"
+ p[:formName] = "942370-0000cc-1"
+ p[:allowedTypes] = CCBILL_PACKS[buyable_id]
+ else
+ p[:clientSubacc] = "0001"
+ p[:formName] = "942370-0001cc-1"
+ p[:formPrice] = total_price.to_f
+ p[:formPeriod] = "2"
+ p[:currencyCode] = "840"
+ p[:formDigest] = Digest::MD5.hexdigest("#{total_price.to_f}#{p[:formPeriod]}#{p[:currencyCode]}NLMX8fmxaROkppOElM27fTbE")
+ end
+ if requires_shipping?
+ p[:shipping_name] = shipping_name
+ p[:shipping_address] = shipping_address
+ p[:shipping_address_2] = shipping_address_2
+ p[:shipping_city] = shipping_city
+ p[:shipping_state] = shipping_state
+ p[:shipping_country] = shipping_country
+ p[:shipping_phone] = shipping_phone
+ p[:shipping_zip] = shipping_zip
+ p[:customer_fname] = shipping_name.split.first
+ p[:customer_lname] = shipping_name.split.last
+ p[:address1] = shipping_address_2.blank? ? shipping_address : "#{shipping_address} #{shipping_address_2}"
+ p[:city] = shipping_city
+ p[:state] = shipping_state
+ p[:zipcode] = shipping_zip
+ p[:country] = shipping_country
+ p[:phone_number] = shipping_phone
+ end
+ "https://bill.ccbill.com/jpost/signup.cgi?#{p.to_query}"
+ end
+
+ def process_postback(postback)
+ success = postback["reasonForDecline"].blank?
+ message = (success ? "Thank you!" : postback["reasonForDecline"])
+ options = {
+ :authorization => postback["subscription_id"],
+ :fraud_review => false,
+ :avs_result => {},
+ :cvv_result => ''
+ }
+ ActiveMerchant::Billing::Response.new(success, message, postback, options)
+ end
+
+ def create_fulfillment!
+ p = {
+ :transactionId => transactions.first.authorization,
+ :shippingCompany => shipping_company,
+ :trackingId => tracking_id,
+ :action => "createFulfillment",
+ :clientAccnum => "942370",
+ :usingSubacc => "0001",
+ :username => "1stbargn",
+ :password => "mybargn1"
+ }
+ req = Net::HTTP::Get.new "https://datalink.ccbill.com/utils/subscriptionManagement.cgi?#{p.to_query}"
+ con = Net::HTTP.new "datalink.ccbill.com", 443
+ con.use_ssl = true
+ con.start {|http| http.request req}
+ end
+
+ module ClassMethods
+ def from_ccbill(p)
+ user = Account.find_by_single_access_token p["uid"]
+ k, b = p["buyable"].try :split, "-"
+ params = {
+ :kind => k,# us
+ :buyable => b,# us
+ :ip_address => p["ip_address"],
+ :first_name => p["customer_fname"],
+ :last_name => p["customer_lname"],
+ :card_type => p["cardType"],
+ :card_expires_on => 20.years.from_now,
+ :shipping_name => (p["shipping_name"].blank? ? p["customer_fname"] + p["customer_lname"] : p["shipping_name"]),#us
+ :shipping_address => p["shipping_address"],#us
+ :shipping_address_2 => p["shipping_address_2"],#us
+ :shipping_city => p["shipping_city"], #us
+ :shipping_state => p["shipping_state"],#us
+ :shipping_country => p["shipping_country"], #us
+ :shipping_phone => p["shipping_phone"],#us
+ :billing_address => p["address1"],
+ :billing_address_2 => "",
+ :billing_city => p["city"],
+ :billing_state => p["state"],
+ :billing_country => p["country"],
+ :billing_phone => p["phone_number"],
+ :shipping_zip => p["shipping_zip"], # us
+ :billing_zip => p["zipcode"],
+ }
+ factory(params, user)
+ end
+ end
+end
\ No newline at end of file
diff --git a/lib/heartbeat.rb b/lib/heartbeat.rb
new file mode 100755
index 0000000..cbd8e9c
--- /dev/null
+++ b/lib/heartbeat.rb
@@ -0,0 +1,87 @@
+#!/usr/bin/env ruby
+
+require File.expand_path('../../config/environment', __FILE__)
+require 'daemon_spawn'
+require "fileutils"
+
+module Heartbeat
+
+ # Generic class for repeated tasks without clock drifting.
+ # This was found at
+ # http://soohwan.blogspot.com/2011/02/ruby-periodic-process.html
+ class Service
+ def initialize
+ @interval = 1.0
+ @start_time = Time.now
+ end
+ def start
+ # Update the start-time
+ @start_time = Time.now
+ # run loop
+ loop do
+ t_start = Time.now
+ # process the job
+ process
+ elapsed = Time.now - t_start
+ if elapsed > @interval
+ puts "Error: Job is bigger than Interval.. #{elapsed}"
+ end
+ # apply some compensation.
+ compensation = (Time.now - @start_time) % @interval
+ sleep(@interval - compensation)
+ end
+ end
+ def process
+ raise NotImplementedError
+ end
+ end
+
+ class AuctionEnder < Service
+ def process # how many auctions ended this cycle
+ finished = Auction.inactive.where(finished: false).update_all(finished: true)
+ Rails.cache.increment("finished", finished)
+ end
+
+ def recover!(period)
+ t = Time.now
+ puts "#{t} Entered recovery mode"
+ t_0 = t - period
+ auctions = Auction.where(ending_at: t_0..t)
+ if auctions.size > 0
+ src = Rails.root.join("public", "watchdog-recovery.html")
+ dest = Rails.root.join("public", "system", "maintenance.html")
+ FileUtils.cp(src, dest)
+ auctions.each do |a|
+ a.ending_at += 600 # 10 minutes
+ a.save
+ end
+ Rails.cache.increment("bids") # TODO: better cache key
+ sleep(1)
+ FileUtils.rm(dest)
+ end
+ puts "#{Time.now} #{auctions.size} auction/s reset"
+ end
+ end
+
+ class Runner < DaemonSpawn::Base
+ def start(args)
+ a = AuctionEnder.new
+ if args[0] == "recovery"
+ a.recover!(args[1].to_i)
+ end
+ a.start
+ end
+
+ def stop
+ puts "#{Time.now} Manually stopped"
+ end
+ end
+end
+
+Heartbeat::Runner.spawn!({
+ application: "Heartbeat",
+ log_file: Rails.root.join("log", "heartbeat.log"),
+ pid_file: Rails.root.join("tmp", "pids", "heartbeat.pid"),
+ working_dir: Rails.root,
+ singleton: true
+})
\ No newline at end of file
diff --git a/lib/menu_tab_builder.rb b/lib/menu_tab_builder.rb
new file mode 100644
index 0000000..2d7837b
--- /dev/null
+++ b/lib/menu_tab_builder.rb
@@ -0,0 +1,14 @@
+class MenuTabBuilder < TabsOnRails::Tabs::TabsBuilder
+
+ def tab_for(tab, name, options, item_options = {})
+ # Adds "current" to the li tag
+ item_options[:class] = item_options[:class].to_s.split(" ").push("current").join(" ") if current_tab?(tab)
+ #content = @context.link_to_unless(current_tab?(tab), name, options) do
+ # @context.link_to @context.content_tag(:span, name), options
+ #end
+ #title = current_tab?(tab) ? "#{name}".html_safe : name
+ content = @context.link_to(name, options) # goes inside li
+ @context.content_tag(:li, content, item_options)
+ end
+
+end
\ No newline at end of file
diff --git a/lib/paypal.rb b/lib/paypal.rb
new file mode 100644
index 0000000..d0a7c11
--- /dev/null
+++ b/lib/paypal.rb
@@ -0,0 +1,61 @@
+module PayPal
+
+ def self.included(klass)
+ klass.class_eval do
+ private :setup_paypal_options, :express_purchase_options
+ end
+ end
+
+ def process_paypal_purchase!
+ response = begin
+ Rails.configuration.paypal.purchase total_price.cents, express_purchase_options
+ rescue ActiveMerchant::ConnectionError
+ ActiveMerchant::Billing::Response.new(false, "PayPal dropped the connection.")
+ end
+ process_response(response)
+ end
+
+ def paypal?
+ gateway == "paypal" || express_token?
+ end
+
+ def paypal_url(r, c)
+ response = Rails.configuration.paypal.setup_purchase(total_price.cents, setup_paypal_options(r, c))
+ Rails.configuration.paypal.redirect_url_for response.token
+ end
+
+ def setup_paypal_options(r, c)
+ {
+ :return_url => r,
+ :cancel_return_url => c,
+ :no_shipping => !requires_shipping?,
+ :description => contents,
+ }
+ end
+
+ def express_purchase_options
+ {
+ :token => express_token,
+ :payer_id => express_payer_id,
+ :description => contents
+ }
+ end
+
+ def express_token=(token)
+ self[:express_token] = token
+ if new_record? && token.present? && express_payer_id.blank?
+ details = Rails.configuration.paypal.details_for token
+ self.express_payer_id = details.payer_id
+ self.first_name = details.params["first_name"]
+ self.last_name = details.params["last_name"]
+ self.shipping_name = details.address["name"]
+ self.shipping_address = details.address["address1"]
+ self.shipping_address_2 = details.address["address2"]
+ self.shipping_city = details.address["city"]
+ self.shipping_state = details.address["state"]
+ self.shipping_zip = details.address["zip"]
+ self.shipping_phone = details.params["contact_phone"]
+ end
+ end
+
+end
\ No newline at end of file
diff --git a/lib/stalker_worker.rb b/lib/stalker_worker.rb
new file mode 100755
index 0000000..b17fd32
--- /dev/null
+++ b/lib/stalker_worker.rb
@@ -0,0 +1,23 @@
+#!/usr/bin/env ruby
+
+# In production and staging, starts 3 workers.
+
+require File.expand_path('../../config/environment', __FILE__)
+require 'daemon_spawn'
+
+class StalkerWorkerDaemon < DaemonSpawn::Base
+ def start(args)
+ exec "stalk config/stalker_jobs.rb"
+ end
+ def stop
+
+ end
+end
+
+StalkerWorkerDaemon.spawn!({
+ processes: (Rails.env.development? ? 2 : 3),
+ log_file: Rails.root.join("log", "stalker_worker.log").to_s, # to_s needed here
+ sync_log: true,
+ working_dir: Rails.root,
+ singleton: true
+})
\ No newline at end of file
diff --git a/lib/tasks/.gitkeep b/lib/tasks/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/lib/tasks/daemons.rake b/lib/tasks/daemons.rake
new file mode 100644
index 0000000..f6587f6
--- /dev/null
+++ b/lib/tasks/daemons.rake
@@ -0,0 +1,6 @@
+# require 'resque/tasks'
+# require 'resque_scheduler/tasks'
+#
+# # load the env so we know about the job classes
+# task "resque:setup" => :environment
+# task "resque:scheduler_setup" => :environmentrails s
diff --git a/lib/tasks/upkeep.rake b/lib/tasks/upkeep.rake
new file mode 100644
index 0000000..e744980
--- /dev/null
+++ b/lib/tasks/upkeep.rake
@@ -0,0 +1,9 @@
+desc 'Expire all buy now prices older than 24 hours'
+task :expire_investments => :environment do
+ Investment.nonexpired.where("updated_at <= ?", Rails.configuration.buy_now_expiration.ago).update_all(expired: true)
+end
+
+desc "Clear the Rails cache"
+task :clear_cache => :environment do
+ Rails.cache.clear
+end
diff --git a/log/.gitkeep b/log/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/public/404.html b/public/404.html
new file mode 100644
index 0000000..f68f90b
--- /dev/null
+++ b/public/404.html
@@ -0,0 +1,70 @@
+
+
+
+ The page you were looking for doesn't exist (404)
+
+
+
+
+
+
+
+
+
Oops, the page you were looking for doesn't exist.
+
You may have mistyped the address or the page may have moved.
+
+
+
\ No newline at end of file
diff --git a/public/422.html b/public/422.html
new file mode 100644
index 0000000..024bc9a
--- /dev/null
+++ b/public/422.html
@@ -0,0 +1,70 @@
+
+
+
+ The change you wanted was rejected (422)
+
+
+
+
+
+
+
+
+
Oops, the change you wanted was rejected.
+
You may have tried to log into another account, but your web browser still has your old account information. Please go back, refresh the page, and try logging in again.
+
+
+
diff --git a/public/500.html b/public/500.html
new file mode 100644
index 0000000..0a5218b
--- /dev/null
+++ b/public/500.html
@@ -0,0 +1,70 @@
+
+
+
+ We're sorry, but something went wrong (500)
+
+
+
+
+
+
+
+
+
Oops, something went wrong.
+
We've been notified about this issue. Our engineers are working on a solution.
+
+
+
diff --git a/public/apple-touch-icon-precomposed.png b/public/apple-touch-icon-precomposed.png
new file mode 100644
index 0000000..dad6a65
Binary files /dev/null and b/public/apple-touch-icon-precomposed.png differ
diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png
new file mode 100644
index 0000000..dad6a65
Binary files /dev/null and b/public/apple-touch-icon.png differ
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..da8b67e
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/public/fonts/embed/AndBasR-webfont.eot b/public/fonts/embed/AndBasR-webfont.eot
new file mode 100644
index 0000000..81e33b3
Binary files /dev/null and b/public/fonts/embed/AndBasR-webfont.eot differ
diff --git a/public/fonts/embed/AndBasR-webfont.svg b/public/fonts/embed/AndBasR-webfont.svg
new file mode 100644
index 0000000..b04166e
--- /dev/null
+++ b/public/fonts/embed/AndBasR-webfont.svg
@@ -0,0 +1,146 @@
+
+
+
\ No newline at end of file
diff --git a/public/fonts/embed/AndBasR-webfont.ttf b/public/fonts/embed/AndBasR-webfont.ttf
new file mode 100644
index 0000000..865fe91
Binary files /dev/null and b/public/fonts/embed/AndBasR-webfont.ttf differ
diff --git a/public/fonts/embed/AndBasR-webfont.woff b/public/fonts/embed/AndBasR-webfont.woff
new file mode 100644
index 0000000..e3dd0c2
Binary files /dev/null and b/public/fonts/embed/AndBasR-webfont.woff differ
diff --git a/public/fonts/embed/ColabLig-webfont.eot b/public/fonts/embed/ColabLig-webfont.eot
new file mode 100644
index 0000000..2aa5b99
Binary files /dev/null and b/public/fonts/embed/ColabLig-webfont.eot differ
diff --git a/public/fonts/embed/ColabLig-webfont.svg b/public/fonts/embed/ColabLig-webfont.svg
new file mode 100644
index 0000000..5a503a3
--- /dev/null
+++ b/public/fonts/embed/ColabLig-webfont.svg
@@ -0,0 +1,142 @@
+
+
+
\ No newline at end of file
diff --git a/public/fonts/embed/ColabLig-webfont.ttf b/public/fonts/embed/ColabLig-webfont.ttf
new file mode 100644
index 0000000..98a683e
Binary files /dev/null and b/public/fonts/embed/ColabLig-webfont.ttf differ
diff --git a/public/fonts/embed/ColabLig-webfont.woff b/public/fonts/embed/ColabLig-webfont.woff
new file mode 100644
index 0000000..00e18f2
Binary files /dev/null and b/public/fonts/embed/ColabLig-webfont.woff differ
diff --git a/public/fonts/embed/ColabReg-webfont.eot b/public/fonts/embed/ColabReg-webfont.eot
new file mode 100644
index 0000000..04cf693
Binary files /dev/null and b/public/fonts/embed/ColabReg-webfont.eot differ
diff --git a/public/fonts/embed/ColabReg-webfont.svg b/public/fonts/embed/ColabReg-webfont.svg
new file mode 100644
index 0000000..92b650f
--- /dev/null
+++ b/public/fonts/embed/ColabReg-webfont.svg
@@ -0,0 +1,142 @@
+
+
+
\ No newline at end of file
diff --git a/public/fonts/embed/ColabReg-webfont.ttf b/public/fonts/embed/ColabReg-webfont.ttf
new file mode 100644
index 0000000..3bd22fa
Binary files /dev/null and b/public/fonts/embed/ColabReg-webfont.ttf differ
diff --git a/public/fonts/embed/ColabReg-webfont.woff b/public/fonts/embed/ColabReg-webfont.woff
new file mode 100644
index 0000000..903e3a7
Binary files /dev/null and b/public/fonts/embed/ColabReg-webfont.woff differ
diff --git a/public/fonts/embed/ColabThi-webfont.eot b/public/fonts/embed/ColabThi-webfont.eot
new file mode 100644
index 0000000..f6c8de6
Binary files /dev/null and b/public/fonts/embed/ColabThi-webfont.eot differ
diff --git a/public/fonts/embed/ColabThi-webfont.svg b/public/fonts/embed/ColabThi-webfont.svg
new file mode 100644
index 0000000..334bc99
--- /dev/null
+++ b/public/fonts/embed/ColabThi-webfont.svg
@@ -0,0 +1,142 @@
+
+
+
\ No newline at end of file
diff --git a/public/fonts/embed/ColabThi-webfont.ttf b/public/fonts/embed/ColabThi-webfont.ttf
new file mode 100644
index 0000000..8ec5ae1
Binary files /dev/null and b/public/fonts/embed/ColabThi-webfont.ttf differ
diff --git a/public/fonts/embed/ColabThi-webfont.woff b/public/fonts/embed/ColabThi-webfont.woff
new file mode 100644
index 0000000..d6ff334
Binary files /dev/null and b/public/fonts/embed/ColabThi-webfont.woff differ
diff --git a/public/images/bidpacks/100-bids.jpg b/public/images/bidpacks/100-bids.jpg
new file mode 100644
index 0000000..b5c359d
Binary files /dev/null and b/public/images/bidpacks/100-bids.jpg differ
diff --git a/public/images/bidpacks/200-bids.jpg b/public/images/bidpacks/200-bids.jpg
new file mode 100644
index 0000000..b2be05b
Binary files /dev/null and b/public/images/bidpacks/200-bids.jpg differ
diff --git a/public/images/bidpacks/30-bids.jpg b/public/images/bidpacks/30-bids.jpg
new file mode 100644
index 0000000..d33f11b
Binary files /dev/null and b/public/images/bidpacks/30-bids.jpg differ
diff --git a/public/images/bidpacks/50-bids.jpg b/public/images/bidpacks/50-bids.jpg
new file mode 100644
index 0000000..058bc98
Binary files /dev/null and b/public/images/bidpacks/50-bids.jpg differ
diff --git a/public/images/bidpacks/recommended-bid-pack.jpg b/public/images/bidpacks/recommended-bid-pack.jpg
new file mode 100644
index 0000000..7431a71
Binary files /dev/null and b/public/images/bidpacks/recommended-bid-pack.jpg differ
diff --git a/public/images/buttons/activate-account.gif b/public/images/buttons/activate-account.gif
new file mode 100644
index 0000000..7197716
Binary files /dev/null and b/public/images/buttons/activate-account.gif differ
diff --git a/public/images/buttons/activate-bid-assistant.gif b/public/images/buttons/activate-bid-assistant.gif
new file mode 100644
index 0000000..162a9d0
Binary files /dev/null and b/public/images/buttons/activate-bid-assistant.gif differ
diff --git a/public/images/buttons/add-item.gif b/public/images/buttons/add-item.gif
new file mode 100644
index 0000000..6e3daa9
Binary files /dev/null and b/public/images/buttons/add-item.gif differ
diff --git a/public/images/buttons/add-new-address.gif b/public/images/buttons/add-new-address.gif
new file mode 100644
index 0000000..027068f
Binary files /dev/null and b/public/images/buttons/add-new-address.gif differ
diff --git a/public/images/buttons/add-to-watchlist.png b/public/images/buttons/add-to-watchlist.png
new file mode 100644
index 0000000..1763606
Binary files /dev/null and b/public/images/buttons/add-to-watchlist.png differ
diff --git a/public/images/buttons/admin-new-items.gif b/public/images/buttons/admin-new-items.gif
new file mode 100644
index 0000000..787c79d
Binary files /dev/null and b/public/images/buttons/admin-new-items.gif differ
diff --git a/public/images/buttons/backarrow.png b/public/images/buttons/backarrow.png
new file mode 100644
index 0000000..173f1a7
Binary files /dev/null and b/public/images/buttons/backarrow.png differ
diff --git a/public/images/buttons/bid-large.gif b/public/images/buttons/bid-large.gif
new file mode 100644
index 0000000..35f427c
Binary files /dev/null and b/public/images/buttons/bid-large.gif differ
diff --git a/public/images/buttons/bid-small.gif b/public/images/buttons/bid-small.gif
new file mode 100644
index 0000000..e2de669
Binary files /dev/null and b/public/images/buttons/bid-small.gif differ
diff --git a/public/images/buttons/bidding-tips.png b/public/images/buttons/bidding-tips.png
new file mode 100644
index 0000000..6c8b659
Binary files /dev/null and b/public/images/buttons/bidding-tips.png differ
diff --git a/public/images/buttons/buy-bids-small.png b/public/images/buttons/buy-bids-small.png
new file mode 100644
index 0000000..4f601c9
Binary files /dev/null and b/public/images/buttons/buy-bids-small.png differ
diff --git a/public/images/buttons/buy-now-narrow.gif b/public/images/buttons/buy-now-narrow.gif
new file mode 100644
index 0000000..162b88d
Binary files /dev/null and b/public/images/buttons/buy-now-narrow.gif differ
diff --git a/public/images/buttons/buy-now-popup.png b/public/images/buttons/buy-now-popup.png
new file mode 100644
index 0000000..8928528
Binary files /dev/null and b/public/images/buttons/buy-now-popup.png differ
diff --git a/public/images/buttons/checkout.png b/public/images/buttons/checkout.png
new file mode 100644
index 0000000..a348d47
Binary files /dev/null and b/public/images/buttons/checkout.png differ
diff --git a/public/images/buttons/continue-shopping.png b/public/images/buttons/continue-shopping.png
new file mode 100644
index 0000000..9403534
Binary files /dev/null and b/public/images/buttons/continue-shopping.png differ
diff --git a/public/images/buttons/continue.png b/public/images/buttons/continue.png
new file mode 100644
index 0000000..0856390
Binary files /dev/null and b/public/images/buttons/continue.png differ
diff --git a/public/images/buttons/edit-item.png b/public/images/buttons/edit-item.png
new file mode 100644
index 0000000..ccda197
Binary files /dev/null and b/public/images/buttons/edit-item.png differ
diff --git a/public/images/buttons/edit.png b/public/images/buttons/edit.png
new file mode 100644
index 0000000..ea069b9
Binary files /dev/null and b/public/images/buttons/edit.png differ
diff --git a/public/images/buttons/editarrow.png b/public/images/buttons/editarrow.png
new file mode 100644
index 0000000..2f014e2
Binary files /dev/null and b/public/images/buttons/editarrow.png differ
diff --git a/public/images/buttons/feature-item.png b/public/images/buttons/feature-item.png
new file mode 100644
index 0000000..7a37acd
Binary files /dev/null and b/public/images/buttons/feature-item.png differ
diff --git a/public/images/buttons/get-started.gif b/public/images/buttons/get-started.gif
new file mode 100644
index 0000000..cffd5ff
Binary files /dev/null and b/public/images/buttons/get-started.gif differ
diff --git a/public/images/buttons/invite-friends-large.png b/public/images/buttons/invite-friends-large.png
new file mode 100644
index 0000000..3aa6f09
Binary files /dev/null and b/public/images/buttons/invite-friends-large.png differ
diff --git a/public/images/buttons/learn-more-large.png b/public/images/buttons/learn-more-large.png
new file mode 100644
index 0000000..77d6b58
Binary files /dev/null and b/public/images/buttons/learn-more-large.png differ
diff --git a/public/images/buttons/login-top.png b/public/images/buttons/login-top.png
new file mode 100644
index 0000000..5e77d1a
Binary files /dev/null and b/public/images/buttons/login-top.png differ
diff --git a/public/images/buttons/login.png b/public/images/buttons/login.png
new file mode 100644
index 0000000..44cc524
Binary files /dev/null and b/public/images/buttons/login.png differ
diff --git a/public/images/buttons/order-now.png b/public/images/buttons/order-now.png
new file mode 100644
index 0000000..0cd162a
Binary files /dev/null and b/public/images/buttons/order-now.png differ
diff --git a/public/images/buttons/paypal.png b/public/images/buttons/paypal.png
new file mode 100644
index 0000000..9ef49b3
Binary files /dev/null and b/public/images/buttons/paypal.png differ
diff --git a/public/images/buttons/pos-neg-admin-btn.png b/public/images/buttons/pos-neg-admin-btn.png
new file mode 100644
index 0000000..d4c9533
Binary files /dev/null and b/public/images/buttons/pos-neg-admin-btn.png differ
diff --git a/public/images/buttons/questionmark.gif b/public/images/buttons/questionmark.gif
new file mode 100644
index 0000000..b9e1777
Binary files /dev/null and b/public/images/buttons/questionmark.gif differ
diff --git a/public/images/buttons/redeem-coupon.png b/public/images/buttons/redeem-coupon.png
new file mode 100644
index 0000000..0903066
Binary files /dev/null and b/public/images/buttons/redeem-coupon.png differ
diff --git a/public/images/buttons/redeem-points.png b/public/images/buttons/redeem-points.png
new file mode 100644
index 0000000..42823e5
Binary files /dev/null and b/public/images/buttons/redeem-points.png differ
diff --git a/public/images/buttons/register-now.png b/public/images/buttons/register-now.png
new file mode 100644
index 0000000..cbadd98
Binary files /dev/null and b/public/images/buttons/register-now.png differ
diff --git a/public/images/buttons/reset-password.png b/public/images/buttons/reset-password.png
new file mode 100644
index 0000000..97a94d4
Binary files /dev/null and b/public/images/buttons/reset-password.png differ
diff --git a/public/images/buttons/save-address.gif b/public/images/buttons/save-address.gif
new file mode 100644
index 0000000..26f7074
Binary files /dev/null and b/public/images/buttons/save-address.gif differ
diff --git a/public/images/buttons/ship.gif b/public/images/buttons/ship.gif
new file mode 100644
index 0000000..3b3e955
Binary files /dev/null and b/public/images/buttons/ship.gif differ
diff --git a/public/images/buttons/showarrow.png b/public/images/buttons/showarrow.png
new file mode 100644
index 0000000..5923913
Binary files /dev/null and b/public/images/buttons/showarrow.png differ
diff --git a/public/images/buttons/site-rules.png b/public/images/buttons/site-rules.png
new file mode 100644
index 0000000..151c566
Binary files /dev/null and b/public/images/buttons/site-rules.png differ
diff --git a/public/images/buttons/splash-get-started.png b/public/images/buttons/splash-get-started.png
new file mode 100644
index 0000000..0c622e2
Binary files /dev/null and b/public/images/buttons/splash-get-started.png differ
diff --git a/public/images/buttons/start-bidding.png b/public/images/buttons/start-bidding.png
new file mode 100644
index 0000000..7b08e57
Binary files /dev/null and b/public/images/buttons/start-bidding.png differ
diff --git a/public/images/buttons/submit.png b/public/images/buttons/submit.png
new file mode 100644
index 0000000..1f3cb3a
Binary files /dev/null and b/public/images/buttons/submit.png differ
diff --git a/public/images/buttons/viewonsite.png b/public/images/buttons/viewonsite.png
new file mode 100644
index 0000000..4418803
Binary files /dev/null and b/public/images/buttons/viewonsite.png differ
diff --git a/public/images/buttons/visit-facebook-button.png b/public/images/buttons/visit-facebook-button.png
new file mode 100644
index 0000000..fd6f54a
Binary files /dev/null and b/public/images/buttons/visit-facebook-button.png differ
diff --git a/public/images/cc/discover.gif b/public/images/cc/discover.gif
new file mode 100644
index 0000000..72e995a
Binary files /dev/null and b/public/images/cc/discover.gif differ
diff --git a/public/images/cc/mc.gif b/public/images/cc/mc.gif
new file mode 100644
index 0000000..32b0d13
Binary files /dev/null and b/public/images/cc/mc.gif differ
diff --git a/public/images/cc/visa-mc.gif b/public/images/cc/visa-mc.gif
new file mode 100644
index 0000000..01ec2d8
Binary files /dev/null and b/public/images/cc/visa-mc.gif differ
diff --git a/public/images/cc/visa.gif b/public/images/cc/visa.gif
new file mode 100644
index 0000000..224cb62
Binary files /dev/null and b/public/images/cc/visa.gif differ
diff --git a/public/images/email/body.gif b/public/images/email/body.gif
new file mode 100644
index 0000000..db34492
Binary files /dev/null and b/public/images/email/body.gif differ
diff --git a/public/images/email/footer-long.gif b/public/images/email/footer-long.gif
new file mode 100644
index 0000000..1bab6f4
Binary files /dev/null and b/public/images/email/footer-long.gif differ
diff --git a/public/images/email/footer.gif b/public/images/email/footer.gif
new file mode 100644
index 0000000..415f55f
Binary files /dev/null and b/public/images/email/footer.gif differ
diff --git a/public/images/email/header.gif b/public/images/email/header.gif
new file mode 100644
index 0000000..ea41ffc
Binary files /dev/null and b/public/images/email/header.gif differ
diff --git a/public/images/email/logo.gif b/public/images/email/logo.gif
new file mode 100644
index 0000000..ea6959f
Binary files /dev/null and b/public/images/email/logo.gif differ
diff --git a/public/images/email/newsletters/030311/apple-day-banner.jpg b/public/images/email/newsletters/030311/apple-day-banner.jpg
new file mode 100644
index 0000000..033681c
Binary files /dev/null and b/public/images/email/newsletters/030311/apple-day-banner.jpg differ
diff --git a/public/images/email/newsletters/030311/apple-day-banner.psd b/public/images/email/newsletters/030311/apple-day-banner.psd
new file mode 100644
index 0000000..82649e8
Binary files /dev/null and b/public/images/email/newsletters/030311/apple-day-banner.psd differ
diff --git a/public/images/email/newsletters/030311/apple-gc.jpg b/public/images/email/newsletters/030311/apple-gc.jpg
new file mode 100644
index 0000000..1532d0b
Binary files /dev/null and b/public/images/email/newsletters/030311/apple-gc.jpg differ
diff --git a/public/images/email/newsletters/030311/apple-ipad.png b/public/images/email/newsletters/030311/apple-ipad.png
new file mode 100644
index 0000000..8433ca5
Binary files /dev/null and b/public/images/email/newsletters/030311/apple-ipad.png differ
diff --git a/public/images/email/newsletters/030311/apple-nano.png b/public/images/email/newsletters/030311/apple-nano.png
new file mode 100644
index 0000000..551b311
Binary files /dev/null and b/public/images/email/newsletters/030311/apple-nano.png differ
diff --git a/public/images/email/newsletters/030311/apple-shuffle.jpg b/public/images/email/newsletters/030311/apple-shuffle.jpg
new file mode 100644
index 0000000..b606d7c
Binary files /dev/null and b/public/images/email/newsletters/030311/apple-shuffle.jpg differ
diff --git a/public/images/email/newsletters/030311/apple-touch.png b/public/images/email/newsletters/030311/apple-touch.png
new file mode 100644
index 0000000..9c2f3a4
Binary files /dev/null and b/public/images/email/newsletters/030311/apple-touch.png differ
diff --git a/public/images/email/newsletters/030311/apple-tv.jpg b/public/images/email/newsletters/030311/apple-tv.jpg
new file mode 100644
index 0000000..b8677da
Binary files /dev/null and b/public/images/email/newsletters/030311/apple-tv.jpg differ
diff --git a/public/images/email/newsletters/030311/bid-now-oj-large.png b/public/images/email/newsletters/030311/bid-now-oj-large.png
new file mode 100644
index 0000000..1fdf562
Binary files /dev/null and b/public/images/email/newsletters/030311/bid-now-oj-large.png differ
diff --git a/public/images/email/newsletters/030311/bid-now-oj-large.psd b/public/images/email/newsletters/030311/bid-now-oj-large.psd
new file mode 100644
index 0000000..19a4843
Binary files /dev/null and b/public/images/email/newsletters/030311/bid-now-oj-large.psd differ
diff --git a/public/images/email/newsletters/030311/bot-wrap.png b/public/images/email/newsletters/030311/bot-wrap.png
new file mode 100644
index 0000000..b4cf424
Binary files /dev/null and b/public/images/email/newsletters/030311/bot-wrap.png differ
diff --git a/public/images/email/newsletters/030311/hp-g62.jpg b/public/images/email/newsletters/030311/hp-g62.jpg
new file mode 100644
index 0000000..321aabe
Binary files /dev/null and b/public/images/email/newsletters/030311/hp-g62.jpg differ
diff --git a/public/images/email/newsletters/030311/hp-g62.psd b/public/images/email/newsletters/030311/hp-g62.psd
new file mode 100644
index 0000000..c5cc2d9
Binary files /dev/null and b/public/images/email/newsletters/030311/hp-g62.psd differ
diff --git a/public/images/email/newsletters/030311/logo.gif b/public/images/email/newsletters/030311/logo.gif
new file mode 100644
index 0000000..4c47ae0
Binary files /dev/null and b/public/images/email/newsletters/030311/logo.gif differ
diff --git a/public/images/email/newsletters/030311/logo.psd b/public/images/email/newsletters/030311/logo.psd
new file mode 100644
index 0000000..979edbb
Binary files /dev/null and b/public/images/email/newsletters/030311/logo.psd differ
diff --git a/public/images/email/newsletters/030311/nav-bar.png b/public/images/email/newsletters/030311/nav-bar.png
new file mode 100644
index 0000000..ec8e530
Binary files /dev/null and b/public/images/email/newsletters/030311/nav-bar.png differ
diff --git a/public/images/email/newsletters/030311/nav-bar.psd b/public/images/email/newsletters/030311/nav-bar.psd
new file mode 100644
index 0000000..9191a44
Binary files /dev/null and b/public/images/email/newsletters/030311/nav-bar.psd differ
diff --git a/public/images/email/newsletters/030311/top-wrap.png b/public/images/email/newsletters/030311/top-wrap.png
new file mode 100644
index 0000000..34398ff
Binary files /dev/null and b/public/images/email/newsletters/030311/top-wrap.png differ
diff --git a/public/images/email/signin.gif b/public/images/email/signin.gif
new file mode 100644
index 0000000..5e43f8e
Binary files /dev/null and b/public/images/email/signin.gif differ
diff --git a/public/images/email/splices/body.jpg b/public/images/email/splices/body.jpg
new file mode 100644
index 0000000..f8431fd
Binary files /dev/null and b/public/images/email/splices/body.jpg differ
diff --git a/public/images/email/splices/footer-short.jpg b/public/images/email/splices/footer-short.jpg
new file mode 100644
index 0000000..29cee1c
Binary files /dev/null and b/public/images/email/splices/footer-short.jpg differ
diff --git a/public/images/email/splices/footer.jpg b/public/images/email/splices/footer.jpg
new file mode 100644
index 0000000..17dd281
Binary files /dev/null and b/public/images/email/splices/footer.jpg differ
diff --git a/public/images/email/splices/header.jpg b/public/images/email/splices/header.jpg
new file mode 100644
index 0000000..e0b50f9
Binary files /dev/null and b/public/images/email/splices/header.jpg differ
diff --git a/public/images/email/v030311/bot-wrap.png b/public/images/email/v030311/bot-wrap.png
new file mode 100644
index 0000000..b4cf424
Binary files /dev/null and b/public/images/email/v030311/bot-wrap.png differ
diff --git a/public/images/email/v030311/logo.gif b/public/images/email/v030311/logo.gif
new file mode 100644
index 0000000..4c47ae0
Binary files /dev/null and b/public/images/email/v030311/logo.gif differ
diff --git a/public/images/email/v030311/nav-bar.png b/public/images/email/v030311/nav-bar.png
new file mode 100644
index 0000000..ec8e530
Binary files /dev/null and b/public/images/email/v030311/nav-bar.png differ
diff --git a/public/images/email/v030311/top-wrap.png b/public/images/email/v030311/top-wrap.png
new file mode 100644
index 0000000..34398ff
Binary files /dev/null and b/public/images/email/v030311/top-wrap.png differ
diff --git a/public/images/external/appconsumer/logo.gif b/public/images/external/appconsumer/logo.gif
new file mode 100644
index 0000000..bd42dee
Binary files /dev/null and b/public/images/external/appconsumer/logo.gif differ
diff --git a/public/images/external/dailymakeover/logo.gif b/public/images/external/dailymakeover/logo.gif
new file mode 100644
index 0000000..ad97637
Binary files /dev/null and b/public/images/external/dailymakeover/logo.gif differ
diff --git a/public/images/external/powered-by.gif b/public/images/external/powered-by.gif
new file mode 100644
index 0000000..bf71ca3
Binary files /dev/null and b/public/images/external/powered-by.gif differ
diff --git a/public/images/facebook-fanpage/firstbargain/firstbargain-splash-v2.jpg b/public/images/facebook-fanpage/firstbargain/firstbargain-splash-v2.jpg
new file mode 100644
index 0000000..c741fb9
Binary files /dev/null and b/public/images/facebook-fanpage/firstbargain/firstbargain-splash-v2.jpg differ
diff --git a/public/images/facebook-fanpage/firstbargain/firstbargain-splash.jpg b/public/images/facebook-fanpage/firstbargain/firstbargain-splash.jpg
new file mode 100644
index 0000000..a2c3968
Binary files /dev/null and b/public/images/facebook-fanpage/firstbargain/firstbargain-splash.jpg differ
diff --git a/public/images/facebook-fanpage/firstbargain/how-to-play.jpg b/public/images/facebook-fanpage/firstbargain/how-to-play.jpg
new file mode 100644
index 0000000..9b0f4c2
Binary files /dev/null and b/public/images/facebook-fanpage/firstbargain/how-to-play.jpg differ
diff --git a/public/images/facebook-fanpage/firstbargain/how-to-text.gif b/public/images/facebook-fanpage/firstbargain/how-to-text.gif
new file mode 100644
index 0000000..05ca0a7
Binary files /dev/null and b/public/images/facebook-fanpage/firstbargain/how-to-text.gif differ
diff --git a/public/images/facebook-fanpage/firstbargain/like-us.jpg b/public/images/facebook-fanpage/firstbargain/like-us.jpg
new file mode 100644
index 0000000..c94fbb1
Binary files /dev/null and b/public/images/facebook-fanpage/firstbargain/like-us.jpg differ
diff --git a/public/images/facebook-fanpage/firstbargain/profile-image.jpg b/public/images/facebook-fanpage/firstbargain/profile-image.jpg
new file mode 100644
index 0000000..47b2e71
Binary files /dev/null and b/public/images/facebook-fanpage/firstbargain/profile-image.jpg differ
diff --git a/public/images/facebook-fanpage/firstbargain/registration-btn.png b/public/images/facebook-fanpage/firstbargain/registration-btn.png
new file mode 100644
index 0000000..b90f076
Binary files /dev/null and b/public/images/facebook-fanpage/firstbargain/registration-btn.png differ
diff --git a/public/images/facebook-fanpage/firstbargain/registration-text.gif b/public/images/facebook-fanpage/firstbargain/registration-text.gif
new file mode 100644
index 0000000..1659cde
Binary files /dev/null and b/public/images/facebook-fanpage/firstbargain/registration-text.gif differ
diff --git a/public/images/facebook-fanpage/justhaute/main-splash.jpg b/public/images/facebook-fanpage/justhaute/main-splash.jpg
new file mode 100644
index 0000000..e5a63b9
Binary files /dev/null and b/public/images/facebook-fanpage/justhaute/main-splash.jpg differ
diff --git a/public/images/facebook-fanpage/justhaute/newpage-button.png b/public/images/facebook-fanpage/justhaute/newpage-button.png
new file mode 100644
index 0000000..9b4627c
Binary files /dev/null and b/public/images/facebook-fanpage/justhaute/newpage-button.png differ
diff --git a/public/images/facebook-fanpage/justhaute/newpage-wrapper.jpg b/public/images/facebook-fanpage/justhaute/newpage-wrapper.jpg
new file mode 100644
index 0000000..ecab1b8
Binary files /dev/null and b/public/images/facebook-fanpage/justhaute/newpage-wrapper.jpg differ
diff --git a/public/images/facebook-fanpage/justhaute/recently-changed-url.png b/public/images/facebook-fanpage/justhaute/recently-changed-url.png
new file mode 100644
index 0000000..e85b2a3
Binary files /dev/null and b/public/images/facebook-fanpage/justhaute/recently-changed-url.png differ
diff --git a/public/images/faq/account.png b/public/images/faq/account.png
new file mode 100644
index 0000000..0260e97
Binary files /dev/null and b/public/images/faq/account.png differ
diff --git a/public/images/faq/auctions.png b/public/images/faq/auctions.png
new file mode 100644
index 0000000..064190b
Binary files /dev/null and b/public/images/faq/auctions.png differ
diff --git a/public/images/faq/new-to-firstbargain.png b/public/images/faq/new-to-firstbargain.png
new file mode 100644
index 0000000..01684ae
Binary files /dev/null and b/public/images/faq/new-to-firstbargain.png differ
diff --git a/public/images/faq/payment.png b/public/images/faq/payment.png
new file mode 100644
index 0000000..cbc5a85
Binary files /dev/null and b/public/images/faq/payment.png differ
diff --git a/public/images/faq/shipping.png b/public/images/faq/shipping.png
new file mode 100644
index 0000000..0de0759
Binary files /dev/null and b/public/images/faq/shipping.png differ
diff --git a/public/images/footer/mc.gif b/public/images/footer/mc.gif
new file mode 100644
index 0000000..a2c58e3
Binary files /dev/null and b/public/images/footer/mc.gif differ
diff --git a/public/images/footer/paypal.gif b/public/images/footer/paypal.gif
new file mode 100644
index 0000000..ad89cf2
Binary files /dev/null and b/public/images/footer/paypal.gif differ
diff --git a/public/images/footer/verisign.png b/public/images/footer/verisign.png
new file mode 100644
index 0000000..75ca039
Binary files /dev/null and b/public/images/footer/verisign.png differ
diff --git a/public/images/footer/visa.gif b/public/images/footer/visa.gif
new file mode 100644
index 0000000..fa106c2
Binary files /dev/null and b/public/images/footer/visa.gif differ
diff --git a/public/images/header/buy-bids-text.png b/public/images/header/buy-bids-text.png
new file mode 100644
index 0000000..549a7e6
Binary files /dev/null and b/public/images/header/buy-bids-text.png differ
diff --git a/public/images/header/facebook-link.png b/public/images/header/facebook-link.png
new file mode 100644
index 0000000..952d3ce
Binary files /dev/null and b/public/images/header/facebook-link.png differ
diff --git a/public/images/header/firstbargain-how-to.jpg b/public/images/header/firstbargain-how-to.jpg
new file mode 100644
index 0000000..2ac72d2
Binary files /dev/null and b/public/images/header/firstbargain-how-to.jpg differ
diff --git a/public/images/header/get-started-text.png b/public/images/header/get-started-text.png
new file mode 100644
index 0000000..e6e6a45
Binary files /dev/null and b/public/images/header/get-started-text.png differ
diff --git a/public/images/header/invite-link.png b/public/images/header/invite-link.png
new file mode 100644
index 0000000..45d5df6
Binary files /dev/null and b/public/images/header/invite-link.png differ
diff --git a/public/images/header/logo.gif b/public/images/header/logo.gif
new file mode 100644
index 0000000..d11ea4c
Binary files /dev/null and b/public/images/header/logo.gif differ
diff --git a/public/images/header/main-splash.jpg b/public/images/header/main-splash.jpg
new file mode 100644
index 0000000..d963f22
Binary files /dev/null and b/public/images/header/main-splash.jpg differ
diff --git a/public/images/header/nav-bg.png b/public/images/header/nav-bg.png
new file mode 100644
index 0000000..2600161
Binary files /dev/null and b/public/images/header/nav-bg.png differ
diff --git a/public/images/header/twitter.gif b/public/images/header/twitter.gif
new file mode 100644
index 0000000..e36f6da
Binary files /dev/null and b/public/images/header/twitter.gif differ
diff --git a/public/images/how-to-play/apple-ipad.gif b/public/images/how-to-play/apple-ipad.gif
new file mode 100644
index 0000000..929ce2a
Binary files /dev/null and b/public/images/how-to-play/apple-ipad.gif differ
diff --git a/public/images/how-to-play/bidding-tips.jpg b/public/images/how-to-play/bidding-tips.jpg
new file mode 100644
index 0000000..342f29a
Binary files /dev/null and b/public/images/how-to-play/bidding-tips.jpg differ
diff --git a/public/images/how-to-play/buynow.gif b/public/images/how-to-play/buynow.gif
new file mode 100644
index 0000000..5a945fc
Binary files /dev/null and b/public/images/how-to-play/buynow.gif differ
diff --git a/public/images/how-to-play/memberstore-cell.gif b/public/images/how-to-play/memberstore-cell.gif
new file mode 100644
index 0000000..33771f4
Binary files /dev/null and b/public/images/how-to-play/memberstore-cell.gif differ
diff --git a/public/images/how-to-play/shadow-top.png b/public/images/how-to-play/shadow-top.png
new file mode 100644
index 0000000..fd44d2e
Binary files /dev/null and b/public/images/how-to-play/shadow-top.png differ
diff --git a/public/images/how-to-play/steps.jpg b/public/images/how-to-play/steps.jpg
new file mode 100644
index 0000000..f4de2b3
Binary files /dev/null and b/public/images/how-to-play/steps.jpg differ
diff --git a/public/images/how-to-play/tos-scroll.jpg b/public/images/how-to-play/tos-scroll.jpg
new file mode 100644
index 0000000..2d94bc4
Binary files /dev/null and b/public/images/how-to-play/tos-scroll.jpg differ
diff --git a/public/images/icons/bids-single.png b/public/images/icons/bids-single.png
new file mode 100644
index 0000000..57f7743
Binary files /dev/null and b/public/images/icons/bids-single.png differ
diff --git a/public/images/icons/buynow-trophy.png b/public/images/icons/buynow-trophy.png
new file mode 100644
index 0000000..d07716a
Binary files /dev/null and b/public/images/icons/buynow-trophy.png differ
diff --git a/public/images/icons/connection.png b/public/images/icons/connection.png
new file mode 100644
index 0000000..753674d
Binary files /dev/null and b/public/images/icons/connection.png differ
diff --git a/public/images/icons/discount-piggy.png b/public/images/icons/discount-piggy.png
new file mode 100644
index 0000000..ddff1bf
Binary files /dev/null and b/public/images/icons/discount-piggy.png differ
diff --git a/public/images/icons/facebook.png b/public/images/icons/facebook.png
new file mode 100644
index 0000000..8bf5971
Binary files /dev/null and b/public/images/icons/facebook.png differ
diff --git a/public/images/icons/notepad.png b/public/images/icons/notepad.png
new file mode 100644
index 0000000..1e3b97c
Binary files /dev/null and b/public/images/icons/notepad.png differ
diff --git a/public/images/icons/speaker.png b/public/images/icons/speaker.png
new file mode 100644
index 0000000..c074c05
Binary files /dev/null and b/public/images/icons/speaker.png differ
diff --git a/public/images/icons/star.png b/public/images/icons/star.png
new file mode 100644
index 0000000..2f8c9f8
Binary files /dev/null and b/public/images/icons/star.png differ
diff --git a/public/images/icons/support.png b/public/images/icons/support.png
new file mode 100644
index 0000000..acb3f49
Binary files /dev/null and b/public/images/icons/support.png differ
diff --git a/public/images/icons/trophy.png b/public/images/icons/trophy.png
new file mode 100644
index 0000000..d567089
Binary files /dev/null and b/public/images/icons/trophy.png differ
diff --git a/public/images/icons/us-dollar.png b/public/images/icons/us-dollar.png
new file mode 100644
index 0000000..244e804
Binary files /dev/null and b/public/images/icons/us-dollar.png differ
diff --git a/public/images/icons/user-order-history-legend.jpg b/public/images/icons/user-order-history-legend.jpg
new file mode 100644
index 0000000..057a850
Binary files /dev/null and b/public/images/icons/user-order-history-legend.jpg differ
diff --git a/public/images/icons/winner-trophy.png b/public/images/icons/winner-trophy.png
new file mode 100644
index 0000000..bf6bc2a
Binary files /dev/null and b/public/images/icons/winner-trophy.png differ
diff --git a/public/images/jquery-ui-theme/ui-bg_diagonals-thick_18_b81900_40x40.png b/public/images/jquery-ui-theme/ui-bg_diagonals-thick_18_b81900_40x40.png
new file mode 100755
index 0000000..954e22d
Binary files /dev/null and b/public/images/jquery-ui-theme/ui-bg_diagonals-thick_18_b81900_40x40.png differ
diff --git a/public/images/jquery-ui-theme/ui-bg_diagonals-thick_20_666666_40x40.png b/public/images/jquery-ui-theme/ui-bg_diagonals-thick_20_666666_40x40.png
new file mode 100755
index 0000000..64ece57
Binary files /dev/null and b/public/images/jquery-ui-theme/ui-bg_diagonals-thick_20_666666_40x40.png differ
diff --git a/public/images/jquery-ui-theme/ui-bg_flat_10_000000_40x100.png b/public/images/jquery-ui-theme/ui-bg_flat_10_000000_40x100.png
new file mode 100755
index 0000000..abdc010
Binary files /dev/null and b/public/images/jquery-ui-theme/ui-bg_flat_10_000000_40x100.png differ
diff --git a/public/images/jquery-ui-theme/ui-bg_glass_100_f6f6f6_1x400.png b/public/images/jquery-ui-theme/ui-bg_glass_100_f6f6f6_1x400.png
new file mode 100755
index 0000000..9b383f4
Binary files /dev/null and b/public/images/jquery-ui-theme/ui-bg_glass_100_f6f6f6_1x400.png differ
diff --git a/public/images/jquery-ui-theme/ui-bg_glass_100_fdf5ce_1x400.png b/public/images/jquery-ui-theme/ui-bg_glass_100_fdf5ce_1x400.png
new file mode 100755
index 0000000..a23baad
Binary files /dev/null and b/public/images/jquery-ui-theme/ui-bg_glass_100_fdf5ce_1x400.png differ
diff --git a/public/images/jquery-ui-theme/ui-bg_glass_65_ffffff_1x400.png b/public/images/jquery-ui-theme/ui-bg_glass_65_ffffff_1x400.png
new file mode 100755
index 0000000..42ccba2
Binary files /dev/null and b/public/images/jquery-ui-theme/ui-bg_glass_65_ffffff_1x400.png differ
diff --git a/public/images/jquery-ui-theme/ui-bg_gloss-wave_35_f6a828_500x100.png b/public/images/jquery-ui-theme/ui-bg_gloss-wave_35_f6a828_500x100.png
new file mode 100755
index 0000000..39d5824
Binary files /dev/null and b/public/images/jquery-ui-theme/ui-bg_gloss-wave_35_f6a828_500x100.png differ
diff --git a/public/images/jquery-ui-theme/ui-bg_highlight-soft_100_eeeeee_1x100.png b/public/images/jquery-ui-theme/ui-bg_highlight-soft_100_eeeeee_1x100.png
new file mode 100755
index 0000000..f127367
Binary files /dev/null and b/public/images/jquery-ui-theme/ui-bg_highlight-soft_100_eeeeee_1x100.png differ
diff --git a/public/images/jquery-ui-theme/ui-bg_highlight-soft_75_ffe45c_1x100.png b/public/images/jquery-ui-theme/ui-bg_highlight-soft_75_ffe45c_1x100.png
new file mode 100755
index 0000000..359397a
Binary files /dev/null and b/public/images/jquery-ui-theme/ui-bg_highlight-soft_75_ffe45c_1x100.png differ
diff --git a/public/images/jquery-ui-theme/ui-icons_222222_256x240.png b/public/images/jquery-ui-theme/ui-icons_222222_256x240.png
new file mode 100755
index 0000000..b273ff1
Binary files /dev/null and b/public/images/jquery-ui-theme/ui-icons_222222_256x240.png differ
diff --git a/public/images/jquery-ui-theme/ui-icons_228ef1_256x240.png b/public/images/jquery-ui-theme/ui-icons_228ef1_256x240.png
new file mode 100755
index 0000000..a641a37
Binary files /dev/null and b/public/images/jquery-ui-theme/ui-icons_228ef1_256x240.png differ
diff --git a/public/images/jquery-ui-theme/ui-icons_ef8c08_256x240.png b/public/images/jquery-ui-theme/ui-icons_ef8c08_256x240.png
new file mode 100755
index 0000000..85e63e9
Binary files /dev/null and b/public/images/jquery-ui-theme/ui-icons_ef8c08_256x240.png differ
diff --git a/public/images/jquery-ui-theme/ui-icons_ffd27a_256x240.png b/public/images/jquery-ui-theme/ui-icons_ffd27a_256x240.png
new file mode 100755
index 0000000..e117eff
Binary files /dev/null and b/public/images/jquery-ui-theme/ui-icons_ffd27a_256x240.png differ
diff --git a/public/images/jquery-ui-theme/ui-icons_ffffff_256x240.png b/public/images/jquery-ui-theme/ui-icons_ffffff_256x240.png
new file mode 100755
index 0000000..42f8f99
Binary files /dev/null and b/public/images/jquery-ui-theme/ui-icons_ffffff_256x240.png differ
diff --git a/public/images/labels/bid-credits.png b/public/images/labels/bid-credits.png
new file mode 100644
index 0000000..1528560
Binary files /dev/null and b/public/images/labels/bid-credits.png differ
diff --git a/public/images/labels/bonus-credits.png b/public/images/labels/bonus-credits.png
new file mode 100644
index 0000000..ca70a9b
Binary files /dev/null and b/public/images/labels/bonus-credits.png differ
diff --git a/public/images/labels/index-price-increment.png b/public/images/labels/index-price-increment.png
new file mode 100644
index 0000000..c1b3e5a
Binary files /dev/null and b/public/images/labels/index-price-increment.png differ
diff --git a/public/images/labels/memberdiscount.gif b/public/images/labels/memberdiscount.gif
new file mode 100644
index 0000000..589af71
Binary files /dev/null and b/public/images/labels/memberdiscount.gif differ
diff --git a/public/images/labels/price-increment.png b/public/images/labels/price-increment.png
new file mode 100644
index 0000000..8a98ace
Binary files /dev/null and b/public/images/labels/price-increment.png differ
diff --git a/public/images/labels/sale-tag.png b/public/images/labels/sale-tag.png
new file mode 100644
index 0000000..e3c4780
Binary files /dev/null and b/public/images/labels/sale-tag.png differ
diff --git a/public/images/labels/sold-overlay.png b/public/images/labels/sold-overlay.png
new file mode 100644
index 0000000..59c7014
Binary files /dev/null and b/public/images/labels/sold-overlay.png differ
diff --git a/public/images/labels/timer-increment.gif b/public/images/labels/timer-increment.gif
new file mode 100644
index 0000000..f1fa1c8
Binary files /dev/null and b/public/images/labels/timer-increment.gif differ
diff --git a/public/images/msc/ajax-loader.gif b/public/images/msc/ajax-loader.gif
new file mode 100644
index 0000000..851866a
Binary files /dev/null and b/public/images/msc/ajax-loader.gif differ
diff --git a/public/images/msc/bid-unsuccessful.png b/public/images/msc/bid-unsuccessful.png
new file mode 100644
index 0000000..f91fe59
Binary files /dev/null and b/public/images/msc/bid-unsuccessful.png differ
diff --git a/public/images/msc/billing-separator.gif b/public/images/msc/billing-separator.gif
new file mode 100644
index 0000000..cb6881f
Binary files /dev/null and b/public/images/msc/billing-separator.gif differ
diff --git a/public/images/msc/bullet.gif b/public/images/msc/bullet.gif
new file mode 100644
index 0000000..d16eac9
Binary files /dev/null and b/public/images/msc/bullet.gif differ
diff --git a/public/images/msc/close-icon.gif b/public/images/msc/close-icon.gif
new file mode 100644
index 0000000..293ab2a
Binary files /dev/null and b/public/images/msc/close-icon.gif differ
diff --git a/public/images/msc/expanded-arrow.png b/public/images/msc/expanded-arrow.png
new file mode 100644
index 0000000..ffda6fb
Binary files /dev/null and b/public/images/msc/expanded-arrow.png differ
diff --git a/public/images/msc/glasses-book.jpg b/public/images/msc/glasses-book.jpg
new file mode 100644
index 0000000..1ec6f58
Binary files /dev/null and b/public/images/msc/glasses-book.jpg differ
diff --git a/public/images/msc/login-arrow.png b/public/images/msc/login-arrow.png
new file mode 100644
index 0000000..294e296
Binary files /dev/null and b/public/images/msc/login-arrow.png differ
diff --git a/public/images/msc/logout-arrow.png b/public/images/msc/logout-arrow.png
new file mode 100644
index 0000000..8b0b707
Binary files /dev/null and b/public/images/msc/logout-arrow.png differ
diff --git a/public/images/msc/minus.gif b/public/images/msc/minus.gif
new file mode 100644
index 0000000..95949fc
Binary files /dev/null and b/public/images/msc/minus.gif differ
diff --git a/public/images/msc/paypal-header.gif b/public/images/msc/paypal-header.gif
new file mode 100644
index 0000000..c4489b9
Binary files /dev/null and b/public/images/msc/paypal-header.gif differ
diff --git a/public/images/msc/plus.gif b/public/images/msc/plus.gif
new file mode 100644
index 0000000..fbee7ad
Binary files /dev/null and b/public/images/msc/plus.gif differ
diff --git a/public/images/msc/satisfaction-guarantee.png b/public/images/msc/satisfaction-guarantee.png
new file mode 100644
index 0000000..2046281
Binary files /dev/null and b/public/images/msc/satisfaction-guarantee.png differ
diff --git a/public/images/msc/shipping-separator.gif b/public/images/msc/shipping-separator.gif
new file mode 100644
index 0000000..94924cf
Binary files /dev/null and b/public/images/msc/shipping-separator.gif differ
diff --git a/public/images/msc/us-flag.gif b/public/images/msc/us-flag.gif
new file mode 100644
index 0000000..ed74ba7
Binary files /dev/null and b/public/images/msc/us-flag.gif differ
diff --git a/public/images/opacity/black-70.png b/public/images/opacity/black-70.png
new file mode 100644
index 0000000..0b3ae32
Binary files /dev/null and b/public/images/opacity/black-70.png differ
diff --git a/public/images/opacity/black-80.png b/public/images/opacity/black-80.png
new file mode 100644
index 0000000..ffa133c
Binary files /dev/null and b/public/images/opacity/black-80.png differ
diff --git a/public/images/opacity/black-85.png b/public/images/opacity/black-85.png
new file mode 100644
index 0000000..0c9c646
Binary files /dev/null and b/public/images/opacity/black-85.png differ
diff --git a/public/images/promo/ended-auctions-text.png b/public/images/promo/ended-auctions-text.png
new file mode 100644
index 0000000..9c1d240
Binary files /dev/null and b/public/images/promo/ended-auctions-text.png differ
diff --git a/public/images/promo/ended-auctions.jpg b/public/images/promo/ended-auctions.jpg
new file mode 100644
index 0000000..dfe783f
Binary files /dev/null and b/public/images/promo/ended-auctions.jpg differ
diff --git a/public/images/promo/firstbargain-savings.png b/public/images/promo/firstbargain-savings.png
new file mode 100644
index 0000000..165357e
Binary files /dev/null and b/public/images/promo/firstbargain-savings.png differ
diff --git a/public/images/promo/firstbargain-vs-ebay.jpg b/public/images/promo/firstbargain-vs-ebay.jpg
new file mode 100644
index 0000000..efc43f2
Binary files /dev/null and b/public/images/promo/firstbargain-vs-ebay.jpg differ
diff --git a/public/images/promo/live-auctions-text.png b/public/images/promo/live-auctions-text.png
new file mode 100644
index 0000000..6d131b9
Binary files /dev/null and b/public/images/promo/live-auctions-text.png differ
diff --git a/public/images/promo/main-splash.jpg b/public/images/promo/main-splash.jpg
new file mode 100644
index 0000000..33fabde
Binary files /dev/null and b/public/images/promo/main-splash.jpg differ
diff --git a/public/images/promo/ourprices.jpg b/public/images/promo/ourprices.jpg
new file mode 100644
index 0000000..aed6beb
Binary files /dev/null and b/public/images/promo/ourprices.jpg differ
diff --git a/public/images/promo/penny-head-2.png b/public/images/promo/penny-head-2.png
new file mode 100644
index 0000000..8472fef
Binary files /dev/null and b/public/images/promo/penny-head-2.png differ
diff --git a/public/images/promo/penny-head.jpg b/public/images/promo/penny-head.jpg
new file mode 100644
index 0000000..8321c88
Binary files /dev/null and b/public/images/promo/penny-head.jpg differ
diff --git a/public/images/promo/penny-quotes.jpg b/public/images/promo/penny-quotes.jpg
new file mode 100644
index 0000000..e99a755
Binary files /dev/null and b/public/images/promo/penny-quotes.jpg differ
diff --git a/public/images/promo/penny-revolution.jpg b/public/images/promo/penny-revolution.jpg
new file mode 100644
index 0000000..dda1456
Binary files /dev/null and b/public/images/promo/penny-revolution.jpg differ
diff --git a/public/images/promo/registration-heading.jpg b/public/images/promo/registration-heading.jpg
new file mode 100644
index 0000000..6db1209
Binary files /dev/null and b/public/images/promo/registration-heading.jpg differ
diff --git a/public/images/promo/savings-banner.jpg b/public/images/promo/savings-banner.jpg
new file mode 100644
index 0000000..c6fdb37
Binary files /dev/null and b/public/images/promo/savings-banner.jpg differ
diff --git a/public/images/promo/scroll-out.jpg b/public/images/promo/scroll-out.jpg
new file mode 100644
index 0000000..a84e7da
Binary files /dev/null and b/public/images/promo/scroll-out.jpg differ
diff --git a/public/images/promo/signup-button.png b/public/images/promo/signup-button.png
new file mode 100644
index 0000000..7a218f5
Binary files /dev/null and b/public/images/promo/signup-button.png differ
diff --git a/public/images/promo/signup-short.png b/public/images/promo/signup-short.png
new file mode 100644
index 0000000..38152a0
Binary files /dev/null and b/public/images/promo/signup-short.png differ
diff --git a/public/images/promo/signup-wrap-01.jpg b/public/images/promo/signup-wrap-01.jpg
new file mode 100644
index 0000000..5d04f34
Binary files /dev/null and b/public/images/promo/signup-wrap-01.jpg differ
diff --git a/public/images/promo/signup-wrap-02.jpg b/public/images/promo/signup-wrap-02.jpg
new file mode 100644
index 0000000..c57d656
Binary files /dev/null and b/public/images/promo/signup-wrap-02.jpg differ
diff --git a/public/images/promo/signup-wrap-03.jpg b/public/images/promo/signup-wrap-03.jpg
new file mode 100644
index 0000000..cdc3941
Binary files /dev/null and b/public/images/promo/signup-wrap-03.jpg differ
diff --git a/public/images/promo/testimonials.jpg b/public/images/promo/testimonials.jpg
new file mode 100644
index 0000000..6ff1cbc
Binary files /dev/null and b/public/images/promo/testimonials.jpg differ
diff --git a/public/images/promo/thousands-satisfied.jpg b/public/images/promo/thousands-satisfied.jpg
new file mode 100644
index 0000000..ae48a5b
Binary files /dev/null and b/public/images/promo/thousands-satisfied.jpg differ
diff --git a/public/images/promo/welcome-heading.jpg b/public/images/promo/welcome-heading.jpg
new file mode 100644
index 0000000..bad7e9a
Binary files /dev/null and b/public/images/promo/welcome-heading.jpg differ
diff --git a/public/images/promo/welcome-splash.jpg b/public/images/promo/welcome-splash.jpg
new file mode 100644
index 0000000..21a1c30
Binary files /dev/null and b/public/images/promo/welcome-splash.jpg differ
diff --git a/public/images/promo/winners-table.jpg b/public/images/promo/winners-table.jpg
new file mode 100644
index 0000000..1a9b456
Binary files /dev/null and b/public/images/promo/winners-table.jpg differ
diff --git a/public/images/server-status/maintenance.jpg b/public/images/server-status/maintenance.jpg
new file mode 100644
index 0000000..d284986
Binary files /dev/null and b/public/images/server-status/maintenance.jpg differ
diff --git a/public/images/slideshow/bargains.png b/public/images/slideshow/bargains.png
new file mode 100644
index 0000000..6243b2d
Binary files /dev/null and b/public/images/slideshow/bargains.png differ
diff --git a/public/images/slideshow/facebook.png b/public/images/slideshow/facebook.png
new file mode 100644
index 0000000..3e55d20
Binary files /dev/null and b/public/images/slideshow/facebook.png differ
diff --git a/public/images/slideshow/featured/031311.png b/public/images/slideshow/featured/031311.png
new file mode 100644
index 0000000..7d8c26d
Binary files /dev/null and b/public/images/slideshow/featured/031311.png differ
diff --git a/public/images/slideshow/featured/031611.png b/public/images/slideshow/featured/031611.png
new file mode 100644
index 0000000..22fae48
Binary files /dev/null and b/public/images/slideshow/featured/031611.png differ
diff --git a/public/images/slideshow/featured/032011.png b/public/images/slideshow/featured/032011.png
new file mode 100644
index 0000000..4170e3a
Binary files /dev/null and b/public/images/slideshow/featured/032011.png differ
diff --git a/public/images/slideshow/featured/032311.png b/public/images/slideshow/featured/032311.png
new file mode 100644
index 0000000..970aea2
Binary files /dev/null and b/public/images/slideshow/featured/032311.png differ
diff --git a/public/images/slideshow/featured/032711.png b/public/images/slideshow/featured/032711.png
new file mode 100644
index 0000000..d63d355
Binary files /dev/null and b/public/images/slideshow/featured/032711.png differ
diff --git a/public/images/slideshow/featured/040311.png b/public/images/slideshow/featured/040311.png
new file mode 100644
index 0000000..90daa50
Binary files /dev/null and b/public/images/slideshow/featured/040311.png differ
diff --git a/public/images/slideshow/featured/040711.png b/public/images/slideshow/featured/040711.png
new file mode 100644
index 0000000..c046e07
Binary files /dev/null and b/public/images/slideshow/featured/040711.png differ
diff --git a/public/images/slideshow/how-to.png b/public/images/slideshow/how-to.png
new file mode 100644
index 0000000..e3f3964
Binary files /dev/null and b/public/images/slideshow/how-to.png differ
diff --git a/public/images/slideshow/nav-current-bg.png b/public/images/slideshow/nav-current-bg.png
new file mode 100644
index 0000000..c737d53
Binary files /dev/null and b/public/images/slideshow/nav-current-bg.png differ
diff --git a/public/images/slideshow/nav-first-current-bg.png b/public/images/slideshow/nav-first-current-bg.png
new file mode 100644
index 0000000..c34d376
Binary files /dev/null and b/public/images/slideshow/nav-first-current-bg.png differ
diff --git a/public/images/slideshow/promo-slideshow-bg.png b/public/images/slideshow/promo-slideshow-bg.png
new file mode 100644
index 0000000..9db016c
Binary files /dev/null and b/public/images/slideshow/promo-slideshow-bg.png differ
diff --git a/public/images/slideshow/referral.png b/public/images/slideshow/referral.png
new file mode 100644
index 0000000..4f5fd4c
Binary files /dev/null and b/public/images/slideshow/referral.png differ
diff --git a/public/images/slideshow/tips.png b/public/images/slideshow/tips.png
new file mode 100644
index 0000000..bb0b454
Binary files /dev/null and b/public/images/slideshow/tips.png differ
diff --git a/public/images/special-offers/apple-day/apple-day-banner.jpg b/public/images/special-offers/apple-day/apple-day-banner.jpg
new file mode 100644
index 0000000..8abb0ee
Binary files /dev/null and b/public/images/special-offers/apple-day/apple-day-banner.jpg differ
diff --git a/public/images/special-offers/apple-day/visit-facebook-button.png b/public/images/special-offers/apple-day/visit-facebook-button.png
new file mode 100644
index 0000000..fd6f54a
Binary files /dev/null and b/public/images/special-offers/apple-day/visit-facebook-button.png differ
diff --git a/public/images/special-offers/valentines-day/valentine.jpg b/public/images/special-offers/valentines-day/valentine.jpg
new file mode 100644
index 0000000..82ec599
Binary files /dev/null and b/public/images/special-offers/valentines-day/valentine.jpg differ
diff --git a/public/images/special-offers/valentines-day/visit-facebook-button.png b/public/images/special-offers/valentines-day/visit-facebook-button.png
new file mode 100644
index 0000000..fd6f54a
Binary files /dev/null and b/public/images/special-offers/valentines-day/visit-facebook-button.png differ
diff --git a/public/images/text/about-us.gif b/public/images/text/about-us.gif
new file mode 100644
index 0000000..17f1c13
Binary files /dev/null and b/public/images/text/about-us.gif differ
diff --git a/public/images/text/activate-your-account.gif b/public/images/text/activate-your-account.gif
new file mode 100644
index 0000000..e18b9a1
Binary files /dev/null and b/public/images/text/activate-your-account.gif differ
diff --git a/public/images/text/affordable-prices.gif b/public/images/text/affordable-prices.gif
new file mode 100644
index 0000000..7b2cc0a
Binary files /dev/null and b/public/images/text/affordable-prices.gif differ
diff --git a/public/images/text/authentic-guaranteed.gif b/public/images/text/authentic-guaranteed.gif
new file mode 100644
index 0000000..18e88f3
Binary files /dev/null and b/public/images/text/authentic-guaranteed.gif differ
diff --git a/public/images/text/bidding-tips.gif b/public/images/text/bidding-tips.gif
new file mode 100644
index 0000000..88a4b50
Binary files /dev/null and b/public/images/text/bidding-tips.gif differ
diff --git a/public/images/text/billing-address.png b/public/images/text/billing-address.png
new file mode 100644
index 0000000..841e321
Binary files /dev/null and b/public/images/text/billing-address.png differ
diff --git a/public/images/text/buy-bids.gif b/public/images/text/buy-bids.gif
new file mode 100644
index 0000000..3386cd8
Binary files /dev/null and b/public/images/text/buy-bids.gif differ
diff --git a/public/images/text/buynow-auctions.png b/public/images/text/buynow-auctions.png
new file mode 100644
index 0000000..9136efb
Binary files /dev/null and b/public/images/text/buynow-auctions.png differ
diff --git a/public/images/text/cart/billing-address.gif b/public/images/text/cart/billing-address.gif
new file mode 100644
index 0000000..5ef69d8
Binary files /dev/null and b/public/images/text/cart/billing-address.gif differ
diff --git a/public/images/text/cart/payment-options.gif b/public/images/text/cart/payment-options.gif
new file mode 100644
index 0000000..9d258c0
Binary files /dev/null and b/public/images/text/cart/payment-options.gif differ
diff --git a/public/images/text/cart/shipping-address.gif b/public/images/text/cart/shipping-address.gif
new file mode 100644
index 0000000..80a76f0
Binary files /dev/null and b/public/images/text/cart/shipping-address.gif differ
diff --git a/public/images/text/confirm-order.gif b/public/images/text/confirm-order.gif
new file mode 100644
index 0000000..b0f45f9
Binary files /dev/null and b/public/images/text/confirm-order.gif differ
diff --git a/public/images/text/contact-us.gif b/public/images/text/contact-us.gif
new file mode 100644
index 0000000..8bb8a9e
Binary files /dev/null and b/public/images/text/contact-us.gif differ
diff --git a/public/images/text/coveted-brands.gif b/public/images/text/coveted-brands.gif
new file mode 100644
index 0000000..06e4936
Binary files /dev/null and b/public/images/text/coveted-brands.gif differ
diff --git a/public/images/text/edit-account-information.png b/public/images/text/edit-account-information.png
new file mode 100644
index 0000000..2399dcb
Binary files /dev/null and b/public/images/text/edit-account-information.png differ
diff --git a/public/images/text/ending-auctions.gif b/public/images/text/ending-auctions.gif
new file mode 100644
index 0000000..40ded32
Binary files /dev/null and b/public/images/text/ending-auctions.gif differ
diff --git a/public/images/text/faq.gif b/public/images/text/faq.gif
new file mode 100644
index 0000000..7cef5ef
Binary files /dev/null and b/public/images/text/faq.gif differ
diff --git a/public/images/text/fb-guarantee.gif b/public/images/text/fb-guarantee.gif
new file mode 100644
index 0000000..1665dd6
Binary files /dev/null and b/public/images/text/fb-guarantee.gif differ
diff --git a/public/images/text/guarantee.gif b/public/images/text/guarantee.gif
new file mode 100644
index 0000000..68f9f3c
Binary files /dev/null and b/public/images/text/guarantee.gif differ
diff --git a/public/images/text/how-to-play.gif b/public/images/text/how-to-play.gif
new file mode 100644
index 0000000..7182fb0
Binary files /dev/null and b/public/images/text/how-to-play.gif differ
diff --git a/public/images/text/invitations.png b/public/images/text/invitations.png
new file mode 100644
index 0000000..afe45d1
Binary files /dev/null and b/public/images/text/invitations.png differ
diff --git a/public/images/text/invite-explanation.gif b/public/images/text/invite-explanation.gif
new file mode 100644
index 0000000..e4b8abf
Binary files /dev/null and b/public/images/text/invite-explanation.gif differ
diff --git a/public/images/text/invite-link-explanation.gif b/public/images/text/invite-link-explanation.gif
new file mode 100644
index 0000000..ea858c0
Binary files /dev/null and b/public/images/text/invite-link-explanation.gif differ
diff --git a/public/images/text/join-the-club.gif b/public/images/text/join-the-club.gif
new file mode 100644
index 0000000..d65af27
Binary files /dev/null and b/public/images/text/join-the-club.gif differ
diff --git a/public/images/text/member-rewards.gif b/public/images/text/member-rewards.gif
new file mode 100644
index 0000000..ae7b389
Binary files /dev/null and b/public/images/text/member-rewards.gif differ
diff --git a/public/images/text/members-discount.gif b/public/images/text/members-discount.gif
new file mode 100644
index 0000000..5ca6d4e
Binary files /dev/null and b/public/images/text/members-discount.gif differ
diff --git a/public/images/text/members-shop.gif b/public/images/text/members-shop.gif
new file mode 100644
index 0000000..09bbe29
Binary files /dev/null and b/public/images/text/members-shop.gif differ
diff --git a/public/images/text/my-credits.png b/public/images/text/my-credits.png
new file mode 100644
index 0000000..4afb794
Binary files /dev/null and b/public/images/text/my-credits.png differ
diff --git a/public/images/text/my-shopping-cart.gif b/public/images/text/my-shopping-cart.gif
new file mode 100644
index 0000000..fe97516
Binary files /dev/null and b/public/images/text/my-shopping-cart.gif differ
diff --git a/public/images/text/my-wins.gif b/public/images/text/my-wins.gif
new file mode 100644
index 0000000..75f84c2
Binary files /dev/null and b/public/images/text/my-wins.gif differ
diff --git a/public/images/text/new-address.png b/public/images/text/new-address.png
new file mode 100644
index 0000000..e0a235b
Binary files /dev/null and b/public/images/text/new-address.png differ
diff --git a/public/images/text/new-to-website.gif b/public/images/text/new-to-website.gif
new file mode 100644
index 0000000..3119773
Binary files /dev/null and b/public/images/text/new-to-website.gif differ
diff --git a/public/images/text/past-auction-winners.gif b/public/images/text/past-auction-winners.gif
new file mode 100644
index 0000000..f95684a
Binary files /dev/null and b/public/images/text/past-auction-winners.gif differ
diff --git a/public/images/text/paypal.png b/public/images/text/paypal.png
new file mode 100644
index 0000000..fe0f0e6
Binary files /dev/null and b/public/images/text/paypal.png differ
diff --git a/public/images/text/privacy-policy.gif b/public/images/text/privacy-policy.gif
new file mode 100644
index 0000000..8d23558
Binary files /dev/null and b/public/images/text/privacy-policy.gif differ
diff --git a/public/images/text/product-description-learn-more.gif b/public/images/text/product-description-learn-more.gif
new file mode 100644
index 0000000..8c2547f
Binary files /dev/null and b/public/images/text/product-description-learn-more.gif differ
diff --git a/public/images/text/product-description.gif b/public/images/text/product-description.gif
new file mode 100644
index 0000000..18d1b49
Binary files /dev/null and b/public/images/text/product-description.gif differ
diff --git a/public/images/text/redeem-auctions.png b/public/images/text/redeem-auctions.png
new file mode 100644
index 0000000..f482ba3
Binary files /dev/null and b/public/images/text/redeem-auctions.png differ
diff --git a/public/images/text/redeem-coupon-codes.png b/public/images/text/redeem-coupon-codes.png
new file mode 100644
index 0000000..e08fd82
Binary files /dev/null and b/public/images/text/redeem-coupon-codes.png differ
diff --git a/public/images/text/reset-your-password.gif b/public/images/text/reset-your-password.gif
new file mode 100644
index 0000000..5d10391
Binary files /dev/null and b/public/images/text/reset-your-password.gif differ
diff --git a/public/images/text/return-policy.gif b/public/images/text/return-policy.gif
new file mode 100644
index 0000000..54f6300
Binary files /dev/null and b/public/images/text/return-policy.gif differ
diff --git a/public/images/text/saved-addresses.png b/public/images/text/saved-addresses.png
new file mode 100644
index 0000000..9ff20f6
Binary files /dev/null and b/public/images/text/saved-addresses.png differ
diff --git a/public/images/text/share-this.png b/public/images/text/share-this.png
new file mode 100644
index 0000000..09dd6ec
Binary files /dev/null and b/public/images/text/share-this.png differ
diff --git a/public/images/text/shipping-address.png b/public/images/text/shipping-address.png
new file mode 100644
index 0000000..8d411c5
Binary files /dev/null and b/public/images/text/shipping-address.png differ
diff --git a/public/images/text/sign-in-to-your-account.gif b/public/images/text/sign-in-to-your-account.gif
new file mode 100644
index 0000000..6b45eb2
Binary files /dev/null and b/public/images/text/sign-in-to-your-account.gif differ
diff --git a/public/images/text/site-rules.gif b/public/images/text/site-rules.gif
new file mode 100644
index 0000000..af20ff1
Binary files /dev/null and b/public/images/text/site-rules.gif differ
diff --git a/public/images/text/terms-of-service.gif b/public/images/text/terms-of-service.gif
new file mode 100644
index 0000000..46bc14b
Binary files /dev/null and b/public/images/text/terms-of-service.gif differ
diff --git a/public/images/text/thank-you.gif b/public/images/text/thank-you.gif
new file mode 100644
index 0000000..f47a774
Binary files /dev/null and b/public/images/text/thank-you.gif differ
diff --git a/public/images/text/upcoming-auctions.gif b/public/images/text/upcoming-auctions.gif
new file mode 100644
index 0000000..39452c9
Binary files /dev/null and b/public/images/text/upcoming-auctions.gif differ
diff --git a/public/images/text/watchlist.png b/public/images/text/watchlist.png
new file mode 100644
index 0000000..9c66eda
Binary files /dev/null and b/public/images/text/watchlist.png differ
diff --git a/public/images/text/were-sorry.gif b/public/images/text/were-sorry.gif
new file mode 100644
index 0000000..85cfecd
Binary files /dev/null and b/public/images/text/were-sorry.gif differ
diff --git a/public/images/text/your-order-history.png b/public/images/text/your-order-history.png
new file mode 100644
index 0000000..637e13c
Binary files /dev/null and b/public/images/text/your-order-history.png differ
diff --git a/public/images/viewer/20_opacity_black.png b/public/images/viewer/20_opacity_black.png
new file mode 100644
index 0000000..c58fb60
Binary files /dev/null and b/public/images/viewer/20_opacity_black.png differ
diff --git a/public/images/viewer/20_opacity_white.png b/public/images/viewer/20_opacity_white.png
new file mode 100644
index 0000000..8c5f794
Binary files /dev/null and b/public/images/viewer/20_opacity_white.png differ
diff --git a/public/images/viewer/50_opacity_black.png b/public/images/viewer/50_opacity_black.png
new file mode 100644
index 0000000..807ac5d
Binary files /dev/null and b/public/images/viewer/50_opacity_black.png differ
diff --git a/public/images/viewer/75_opacity_black.png b/public/images/viewer/75_opacity_black.png
new file mode 100644
index 0000000..dff76ea
Binary files /dev/null and b/public/images/viewer/75_opacity_black.png differ
diff --git a/public/images/viewer/8_opacity_white.png b/public/images/viewer/8_opacity_white.png
new file mode 100644
index 0000000..23b1a12
Binary files /dev/null and b/public/images/viewer/8_opacity_white.png differ
diff --git a/public/images/viewer/bg.jpg b/public/images/viewer/bg.jpg
new file mode 100644
index 0000000..664c587
Binary files /dev/null and b/public/images/viewer/bg.jpg differ
diff --git a/public/images/viewer/footer_bg.png b/public/images/viewer/footer_bg.png
new file mode 100644
index 0000000..138d823
Binary files /dev/null and b/public/images/viewer/footer_bg.png differ
diff --git a/public/images/viewer/logo.png b/public/images/viewer/logo.png
new file mode 100644
index 0000000..d910b57
Binary files /dev/null and b/public/images/viewer/logo.png differ
diff --git a/public/images/viewer/submit_btn.png b/public/images/viewer/submit_btn.png
new file mode 100644
index 0000000..9a11352
Binary files /dev/null and b/public/images/viewer/submit_btn.png differ
diff --git a/public/images/wrapper/about-tabs/advisory-bg.png b/public/images/wrapper/about-tabs/advisory-bg.png
new file mode 100644
index 0000000..4125557
Binary files /dev/null and b/public/images/wrapper/about-tabs/advisory-bg.png differ
diff --git a/public/images/wrapper/about-tabs/bg.png b/public/images/wrapper/about-tabs/bg.png
new file mode 100644
index 0000000..b664205
Binary files /dev/null and b/public/images/wrapper/about-tabs/bg.png differ
diff --git a/public/images/wrapper/about-tabs/overview-bg.png b/public/images/wrapper/about-tabs/overview-bg.png
new file mode 100644
index 0000000..0bdc22f
Binary files /dev/null and b/public/images/wrapper/about-tabs/overview-bg.png differ
diff --git a/public/images/wrapper/about-tabs/team-bg.png b/public/images/wrapper/about-tabs/team-bg.png
new file mode 100644
index 0000000..84865ec
Binary files /dev/null and b/public/images/wrapper/about-tabs/team-bg.png differ
diff --git a/public/images/wrapper/beginner-auction-popup.png b/public/images/wrapper/beginner-auction-popup.png
new file mode 100644
index 0000000..7eb403f
Binary files /dev/null and b/public/images/wrapper/beginner-auction-popup.png differ
diff --git a/public/images/wrapper/beginner-auction.png b/public/images/wrapper/beginner-auction.png
new file mode 100644
index 0000000..a534d4f
Binary files /dev/null and b/public/images/wrapper/beginner-auction.png differ
diff --git a/public/images/wrapper/dashboard-main-menu-bg.png b/public/images/wrapper/dashboard-main-menu-bg.png
new file mode 100644
index 0000000..d63d851
Binary files /dev/null and b/public/images/wrapper/dashboard-main-menu-bg.png differ
diff --git a/public/images/wrapper/dashboard-nav-arrow.png b/public/images/wrapper/dashboard-nav-arrow.png
new file mode 100644
index 0000000..dec72d7
Binary files /dev/null and b/public/images/wrapper/dashboard-nav-arrow.png differ
diff --git a/public/images/wrapper/featured-auction.png b/public/images/wrapper/featured-auction.png
new file mode 100644
index 0000000..f8be572
Binary files /dev/null and b/public/images/wrapper/featured-auction.png differ
diff --git a/public/images/wrapper/footer-wrapper.png b/public/images/wrapper/footer-wrapper.png
new file mode 100644
index 0000000..0458a49
Binary files /dev/null and b/public/images/wrapper/footer-wrapper.png differ
diff --git a/public/images/wrapper/hot-auction.png b/public/images/wrapper/hot-auction.png
new file mode 100644
index 0000000..34e557e
Binary files /dev/null and b/public/images/wrapper/hot-auction.png differ
diff --git a/public/images/wrapper/how-to-tabs/auctions.gif b/public/images/wrapper/how-to-tabs/auctions.gif
new file mode 100644
index 0000000..4e0d97b
Binary files /dev/null and b/public/images/wrapper/how-to-tabs/auctions.gif differ
diff --git a/public/images/wrapper/how-to-tabs/bg.png b/public/images/wrapper/how-to-tabs/bg.png
new file mode 100644
index 0000000..b664205
Binary files /dev/null and b/public/images/wrapper/how-to-tabs/bg.png differ
diff --git a/public/images/wrapper/how-to-tabs/guarantee.gif b/public/images/wrapper/how-to-tabs/guarantee.gif
new file mode 100644
index 0000000..399dbf5
Binary files /dev/null and b/public/images/wrapper/how-to-tabs/guarantee.gif differ
diff --git a/public/images/wrapper/how-to-tabs/rewards.gif b/public/images/wrapper/how-to-tabs/rewards.gif
new file mode 100644
index 0000000..8c022c5
Binary files /dev/null and b/public/images/wrapper/how-to-tabs/rewards.gif differ
diff --git a/public/images/wrapper/invites-tabs/bg.png b/public/images/wrapper/invites-tabs/bg.png
new file mode 100644
index 0000000..b664205
Binary files /dev/null and b/public/images/wrapper/invites-tabs/bg.png differ
diff --git a/public/images/wrapper/invites-tabs/invite-friends.png b/public/images/wrapper/invites-tabs/invite-friends.png
new file mode 100644
index 0000000..7e1a379
Binary files /dev/null and b/public/images/wrapper/invites-tabs/invite-friends.png differ
diff --git a/public/images/wrapper/invites-tabs/your-invites.png b/public/images/wrapper/invites-tabs/your-invites.png
new file mode 100644
index 0000000..dce1801
Binary files /dev/null and b/public/images/wrapper/invites-tabs/your-invites.png differ
diff --git a/public/images/wrapper/main-wrapper.png b/public/images/wrapper/main-wrapper.png
new file mode 100644
index 0000000..597a52f
Binary files /dev/null and b/public/images/wrapper/main-wrapper.png differ
diff --git a/public/images/wrapper/my-wins-wrapper.gif b/public/images/wrapper/my-wins-wrapper.gif
new file mode 100644
index 0000000..82d346a
Binary files /dev/null and b/public/images/wrapper/my-wins-wrapper.gif differ
diff --git a/public/images/wrapper/new-bidder-popup.png b/public/images/wrapper/new-bidder-popup.png
new file mode 100644
index 0000000..1d570d0
Binary files /dev/null and b/public/images/wrapper/new-bidder-popup.png differ
diff --git a/public/images/wrapper/payment-tabs/bg.png b/public/images/wrapper/payment-tabs/bg.png
new file mode 100644
index 0000000..b664205
Binary files /dev/null and b/public/images/wrapper/payment-tabs/bg.png differ
diff --git a/public/images/wrapper/payment-tabs/cc-bg.png b/public/images/wrapper/payment-tabs/cc-bg.png
new file mode 100644
index 0000000..1064dfd
Binary files /dev/null and b/public/images/wrapper/payment-tabs/cc-bg.png differ
diff --git a/public/images/wrapper/payment-tabs/pp-bg.png b/public/images/wrapper/payment-tabs/pp-bg.png
new file mode 100644
index 0000000..5993933
Binary files /dev/null and b/public/images/wrapper/payment-tabs/pp-bg.png differ
diff --git a/public/images/wrapper/product-cell.png b/public/images/wrapper/product-cell.png
new file mode 100644
index 0000000..2213030
Binary files /dev/null and b/public/images/wrapper/product-cell.png differ
diff --git a/public/images/wrapper/shadow-right.png b/public/images/wrapper/shadow-right.png
new file mode 100644
index 0000000..8f6f366
Binary files /dev/null and b/public/images/wrapper/shadow-right.png differ
diff --git a/public/javascripts/application.js b/public/javascripts/application.js
new file mode 100644
index 0000000..224b856
--- /dev/null
+++ b/public/javascripts/application.js
@@ -0,0 +1,209 @@
+/*!
+ * Copyright 2010 Expedient Shopping, Inc.
+ * Not to be copied or distributed without the written consent of Expedient Shopping, Inc.
+ */
+var rollOvers = {};
+var small_bid_complete = '0 -120px';
+var large_bid_complete = '0 -150px';
+var A = {}; // All auctions on page.
+
+/* Product image rollovers */
+function registerRollover(elem, img) {
+ rollOvers[elem] = img;
+}
+
+function auctionDialog (_title, body) {
+ $("#error-modal-dialog").text(body).dialog({ title: _title }).dialog('open');
+ return false;
+}
+
+$(function() {
+ // Internal variables
+ var mouse_is_inside = false;
+ var small_bidding = '0 -40px';
+ var large_bidding = '0 -50px';
+ var toDisable = '#shipping-address-toggle-node, #order_billing_address, #order_billing_address_2, #order_billing_city, #order_billing_state, #order_billing_zip, #order_billing_phone, #order_shipping_name, #order_shipping_address, #order_shipping_address_2, #order_shipping_city, #order_shipping_state, #order_shipping_zip, #order_shipping_phone';
+ var latency = [0,0,0,0];
+ var cur_l = 0;
+ var start_t = 0;
+ var $connStatus = $("#user-credits-main .latency");
+ var connText = "";
+ function updateConnStatus() {
+ var avg_lat = (latency[0]+latency[1]+latency[2]+latency[3])/4;
+ if(avg_lat < 300) {
+ $connStatus.attr("class","latency conn-good");
+ if(connText !== "good") {
+ $connStatus.unbind("hover");
+ connText = "good";
+ $connStatus.tipTip({content: "Your internet connection is good"});
+ }
+ } else if(avg_lat < 700) {
+ $connStatus.attr("class","latency conn-fair");
+ if(connText !== "fair") {
+ $connStatus.unbind("hover");
+ connText = "fair";
+ $connStatus.tipTip({content: "Your internet connection is fair"});
+ }
+ } else {
+ $connStatus.attr("class","latency conn-poor");
+ if(connText !== "poor") {
+ $connStatus.unbind("hover");
+ connText = "poor";
+ $connStatus.tipTip({content: "Your internet connection is poor"});
+ }
+ }
+ }
+ $("body").ajaxSend(function (event, xhr, options) {
+ start_t = new Date();
+ });
+ $("body").ajaxSuccess(function (event, xhr, options) {
+ latency[(cur_l++)%4] = new Date().getTime() - start_t.getTime();
+ updateConnStatus();
+ });
+ $("body").ajaxError(function (event, xhr, options, thrownError) {
+ latency[(cur_l++)%4] = 2400;
+ updateConnStatus();
+ if (xhr.status == 503) { // System disruption
+ window.location = "system/maintenance.html"
+ }
+ });
+
+ // Hides and Removes "checked" property for Shipping Address checkbox -- Fix browser caching form inputs
+ //$('#checkout-address #shipping-address').hide();
+ $('#checkout-address #shipping-address-toggle-node').attr('checked', false);
+ $(toDisable).attr('disabled', false);
+
+ // Shipping Address Toggling
+ $('#checkout-address #shipping-address-toggle-node').click(function () {
+ $('#checkout-address #shipping-address').slideToggle('slow');
+ });
+
+ // Top Login Form Toggling
+ $('#top-login #toggle-node').click(function(e){
+ e.preventDefault();
+ $('#top-login #login-body').toggle();
+ $('#top-login #toggle-node').toggleClass('expanded');
+ });
+ $('#top-login #login-body').mouseup(function(){
+ return false;
+ });
+ $(document).mouseup(function(e){
+ if($(e.target).parent('#top-login #toggle-node').length==0){
+ $('#top-login #toggle-node').removeClass('expanded');
+ $('#top-login #login-body').hide();
+ }
+ });
+
+ // IMAGE GALLERY
+ $("#gallery li").mouseenter(function () {
+ $('#viewer img').attr("src", rollOvers[$(this).attr('id')]);
+ });
+
+ // Payment Selection
+ $('#cc-tab').click(function () {
+ $(this).addClass('selected');
+ $('#pp-tab').removeClass('selected');
+ $('#credit-card-form').stop(true, true).show();
+ $('#paypal-form').stop(true, true).hide();
+ $(toDisable).attr('disabled', false);
+ $("#order_gateway").val("authorize");
+ });
+ $('#pp-tab').click(function () {
+ $(this).addClass('selected');
+ $('#cc-tab').removeClass('selected');
+ $('#paypal-form').stop(true, true).show();
+ $('#credit-card-form').stop(true, true).hide();
+ $(toDisable).attr('disabled', 'disabled');
+ $('#order_gateway').val("paypal");
+ });
+
+ // Binds AJAX bid clicks
+ $('#main-auctions form, #watchlist-auctions form').bind("ajax:before", function () {
+ A[parseInt(this.id, 10)].bidding = true;
+ $(this.commit).css('background-position', small_bidding).attr('disabled', 'disabled');
+ });
+ $('#main-numbers form').bind("ajax:before", function () {
+ A[parseInt(this.id, 10)].bidding = true;
+ $(this.commit).css('background-position', large_bidding).attr('disabled', 'disabled');
+ });
+
+ // Invitation Page Tabs
+ $('#invite-friends-tab').click(function () {
+ $(this).addClass('selected');
+ $('#your-invites-tab').removeClass('selected');
+ $('#invite-friends').stop(true, true).show();
+ $('#your-invites').stop(true, true).hide();
+ });
+ $('#your-invites-tab').click(function () {
+ $(this).addClass('selected');
+ $('#invite-friends-tab').removeClass('selected');
+ $('#your-invites').stop(true, true).show();
+ $('#invite-friends').stop(true, true).hide();
+ });
+
+ // FAQ toggle
+ $(".faq-block h3").click(function() {
+ var block = $(this).parent();
+ if (block.hasClass("faq-hidden")) {
+ block.removeClass("faq-hidden");
+ } else {
+ block.addClass("faq-hidden");
+ }
+ });
+ // FAQ Hover Effects
+ $("#faq-page-index .column").hover(function() {
+ var button = $(this).children(":first");
+ button.addClass("revealed");
+ },
+ function () {
+ var button = $(this).children(":first");
+ button.removeClass("revealed");
+ });
+
+ // POP UPS
+ $('a.popup').live('click', function(){
+ newwindow = window.open($(this).attr('href'),'','height=400,width=600,scrollbars=yes,left=200,top=50');
+ if (window.focus) { newwindow.focus(); }
+ return false;
+ });
+
+ // BUY NOW AND ERROR CLOSE
+ $('.overlay-popup-toggle').click(function() {
+ $(this).parent().hide();
+ });
+
+ // tipTip trigger
+ $(".hasTooltip").tipTip({maxWidth: "270px"});
+
+ // Orders History Table Toggle
+ $("#show-void-declined").click(function() {
+ var wrap = $(this).parent();
+ var tab = wrap.children(":first");
+ if (tab.hasClass("order-history-hidden")) {
+ tab.removeClass("order-history-hidden");
+ $(this).text("Hide Void & Declined Orders");
+ } else {
+ tab.addClass("order-history-hidden");
+ $(this).text("Show Void & Declined Orders");
+ }
+ });
+
+ // Order confirmation screen
+ $("#place-order form").bind("ajax:before", function () {
+ $("#place-order").hide();
+ $("#order-processing").show();
+ });
+
+ // Initialize Modal Dialogs
+ $("#error-modal-dialog").dialog({
+ width: 400,
+ draggable: false,
+ closeOnEscape: true,
+ dialogClass: 'error-modal-dialog',
+ autoOpen: false,
+ resizable: false,
+ modal: true,
+ buttons:{ "Close": function() { $(this).dialog('close'); } }
+ });
+
+}); // closes doc ready function
\ No newline at end of file
diff --git a/public/javascripts/jquery.js b/public/javascripts/jquery.js
new file mode 100644
index 0000000..b2ac174
--- /dev/null
+++ b/public/javascripts/jquery.js
@@ -0,0 +1,18 @@
+/*!
+ * jQuery JavaScript Library v1.6.1
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu May 12 15:04:36 2011 -0400
+ */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!cj[a]){var b=f("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),c.body.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write("");b=cl.createElement(a),cl.body.appendChild(b),d=f.css(b,"display"),c.body.removeChild(ck)}cj[a]=d}return cj[a]}function cu(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function ct(){cq=b}function cs(){setTimeout(ct,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g=0===c})}function W(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function O(a,b){return(a&&a!=="*"?a+".":"")+b.replace(A,"`").replace(B,"&")}function N(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function L(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function F(){return!0}function E(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function H(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(H,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=d.userAgent,x,y,z,A=Object.prototype.toString,B=Object.prototype.hasOwnProperty,C=Array.prototype.push,D=Array.prototype.slice,E=String.prototype.trim,F=Array.prototype.indexOf,G={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.1",length:0,size:function(){return this.length},toArray:function(){return D.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?C.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(D.apply(this,arguments),"slice",D.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:C,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;y.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!y){y=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",z,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",z),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&H()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):G[A.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!B.call(a,"constructor")&&!B.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||B.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};f=c.createElement("select"),g=f.appendChild(c.createElement("option")),h=a.getElementsByTagName("input")[0],j={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},h.checked=!0,j.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,j.optDisabled=!g.disabled;try{delete a.test}catch(s){j.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function b(){j.noCloneEvent=!1,a.detachEvent("onclick",b)}),a.cloneNode(!0).fireEvent("onclick")),h=c.createElement("input"),h.value="t",h.setAttribute("type","radio"),j.radioValue=h.value==="t",h.setAttribute("checked","checked"),a.appendChild(h),k=c.createDocumentFragment(),k.appendChild(a.firstChild),j.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",l=c.createElement("body"),m={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"};for(q in m)l.style[q]=m[q];l.appendChild(a),b.insertBefore(l,b.firstChild),j.appendChecked=h.checked,j.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,j.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="",j.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="