Commits

marconius committed d4d5f92

backing out of inventory edit changes

  • Participants
  • Parent commits 4e729e1

Comments (0)

Files changed (37)

satchmo/apps/product/forms.py

-import math
 try:
     from cStringIO import StringIO
 except ImportError:
     from StringIO import StringIO
+
 from django import forms
 from django.conf import settings
 from django.contrib import messages
     fmts = serializers.get_public_serializer_formats()
     return zip(fmts,fmts)
 
-class InventoryFormLite(forms.Form):
-    def __init__(self, position, *args, **kwargs):
-        products = kwargs.pop('products', None)
-
-        super(InventoryFormLite, self).__init__(*args, **kwargs)
-            
-        products = Product.objects.by_site().order_by('slug')
-
-        # Get a number that will produce a products list of manageable size
-        chunk_size = p_count = products.count()
-        while chunk_size > 50:
-            chunk_size = int(math.sqrt(chunk_size))
-            progress_block = 0 # TODO: this could be used to calculate percent progress where each chunk_size products advances progress progress+block %
-        
-        end_pos = position + chunk_size - 1
-        # if we are at the end of list
-        if end_pos >= p_count:
-            end_pos = p_count-1
-        
-        #for product in products[position:end_pos]:
-        for product in products[120:126]:
-            subtypes = product.get_subtypes()
-            qtyclasses = ('text', 'qty') + subtypes
-            qtyclasses = " ".join(qtyclasses)
-            
-            if product.brand_set.all():
-                brand = "[" + product.brand_set.all()[0].translation.name + "] "
-            else:
-                brand = ""
-            
-            product_info = brand + product.name
-            kw = {
-            'label' : product.slug,
-            'help_text' : product_info,
-            'initial' : product.items_in_stock,
-            'widget' : forms.TextInput(attrs={'class': qtyclasses}) }
-
-            qty = forms.DecimalField(**kw)
-            self.fields['qty__%s' % product.slug] = qty
-            qty.slug = product.slug
-            qty.product_id = product.id
-            qty.subtypes = " ".join(subtypes)
-
-            if 'CustomProduct' in subtypes:
-                initial_price = product.customproduct.full_price
-            else:
-                initial_price = product.unit_price
-
-            kw['initial'] = initial_price
-            kw['required'] = False
-            kw['widget'] = forms.TextInput(attrs={'class': "text price"})
-            price = forms.DecimalField(**kw)
-            price.slug = product.slug
-            self.fields['price__%s' % product.slug] = price
-
-            kw['initial'] = product.active
-            kw['widget'] = forms.CheckboxInput(attrs={'class': "checkbox active"})
-            active = forms.BooleanField(**kw)
-            active.slug = product.slug
-            self.fields['active__%s' % product.slug] = active
-
-            kw['initial'] = product.featured
-            kw['widget'] = forms.CheckboxInput(attrs={'class': "checkbox featured"})
-            featured = forms.BooleanField(**kw)
-            featured.slug = product.slug
-            self.fields['featured__%s' % product.slug] = featured
-    
-    def save(self, request):
-        self.full_clean()
-        for name, value in self.cleaned_data.items():
-            opt, key = name.split('__')
-
-            prod = Product.objects.get(slug__exact=key)
-            subtypes = prod.get_subtypes()
-
-            if opt=='qty':
-                if value != prod.items_in_stock:
-                    messages.add_message(request, messages.INFO, 'Updated %s stock to %s' % (key, value))
-                    log.debug('Saving new qty=%d for %s' % (value, key))
-                    prod.items_in_stock = value
-                    prod.save()
-
-            elif opt=='price':
-                if 'CustomProduct' in subtypes:
-                    full_price = prod.customproduct.full_price
-                else:
-                    full_price = prod.unit_price
-
-                if value != full_price:
-                    messages.add_message(request, messages.INFO, 'Updated %s unit price to %s' % (key, value))
-                    log.debug('Saving new price %s for %s' % (value, key))
-                    try:
-                        price = Price.objects.get(product=prod, quantity='1')
-                    except Price.DoesNotExist:
-                        price = Price(product=prod, quantity='1')
-                    price.price = value
-                    price.save()
-
-            elif opt=="active":
-                if value != prod.active:
-                    if value:
-                        note = "Activated %s"
-                    else:
-                        note = "Deactivated %s"
-                    messages.add_message(request, messages.INFO, note % (key))
-
-                    prod.active = value
-                    prod.save()
-
-            elif opt=="featured":
-                if value != prod.featured:
-                    if value:
-                        note = "%s is now featured"
-                    else:
-                        note = "%s is no longer featured"
-                    messages.add_message(request, messages.INFO, note % (key))
-
-                    prod.featured = value
-                    prod.save()
-
-
 class InventoryForm(forms.Form):
 
     def __init__(self, *args, **kwargs):

satchmo/apps/product/templates/product/admin/inventory_form.html

         }
     }
     </script>
-    
-    
-    <script type="text/javascript">
-    function saveForm() {
-        $.ajax({
-            url: "{% url satchmo_admin_save_inventory_ajax %}",
-            type: "GET",
-            //data: {"csrfmiddlewaretoken": "{% csrf_token %}"},
-            success: function(data){ 
-                $("#load-status").text(data); 
-            }, 
-            error: function(jqXHR, textStatus) {
-                $("#load-status").text( textStatus );
-            }
-        });
-                
-        //$("#inventory-table").find("input").appendTo("#inventoryform");
-        //$("#inventoryform").submit();
-    }
-    
-    var loadForm = $.ajax({
-        type: "GET",
-        url: "{% url satchmo_admin_edit_inventory_ajax %}",
-        dataType: "html"
-    }); 
-        
-    $('document').ready(function() {
-        //loadForm();
-        loadForm.done(function(msg) {
-            var fields = $.parseJSON(msg);
-            $(fields.form_html).appendTo("#inventory-table");
-            $("#load-status").text("done");
-        });
-        
-        $("#inventory-submit").click(function(e) {
-            e.preventDefault();
-            saveForm();
-        });
-    });
-    
-    </script>
-    
 {% endblock %}
 
 {% block coltype %}colMS{% endblock %}
      {% trans "Inventory Management" %}
 </div>
 {% endif %}{% endblock %}
-
 {% block content %}
 <div id="content-main">
-    <p id="load-status">loading...</p>
 {% if form.errors %}
     <p class="errornote">
     {% blocktrans count form.errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
 {% endif %}
 {% if form.fields %}
 <form method="post" id="inventoryform">{% csrf_token %}
-</form>
-
-<hr />
-
-<table id="inventory-table">
-    <tr>
-        <th>{% trans 'Slug' %}</th>
-        <th>{% trans 'Name' %}</th>
-        <th>{% trans 'Inventory' %}</th>
-        <th>{% trans 'Unit Price' %}</th>
-        <th>{% trans 'Active' %}</th>
-        <th>{% trans 'Featured' %}</th>
-    </tr>
-{% comment %}Filled in by js{% endcomment %}
-	</tr>
-</table>
-
-<input type="submit" value="Save" class="default" id="inventory-submit" />
+    <table>
+        <tr>
+            <th>{% trans 'Slug' %}</th>
+            <th>{% trans 'Name' %}</th>
+            <th>{% trans 'Inventory' %}</th>
+            <th>{% trans 'Unit Price' %}</th>
+            <th>{% trans 'Active' %}</th>
+            <th>{% trans 'Featured' %}</th>
+        </tr>
+    {% for field in form %}
+        {% if field.is_hidden %}
+            {{ field }}
+        {% else %}
+            {% ifchanged field.field.slug %}
+                {% if not forloop.first %}
+        		</tr>
+        		{% endif %}
+                <tr class="{{ field.field.subtypes }}">
+                    <td><a href="{% url admin:product_product_change field.field.product_id %}">{{ field.label_tag }}</a></td>
+                    <td>{{ field.help_text}}</td>
+            {% endifchanged %}
+                    <td>
+                	    {% if field.errors %}
+                		<span class="error">{{ field.errors }}</span><br/>
+        		        {% endif %}
+                        {{ field }}
+                    </td>
+    	{% endif %}
+    {% endfor %}
+        		</tr>
+    </table>
+<input type="submit" value="Save" class="default" />
 <input type="reset" value="Reset" class="default" />
 <h2>{% trans 'Helpers' %}</h2>
-<p><a href="#" id="featured_on">{% trans 'Mark all featured' %}</a></p>
-<p><a href="#" id="featured_off">{% trans 'Clear all featured' %}</a></p>
-<p><a href="#" id="disable_all_zeroes">{% trans 'Disable all Products with 0 quantity.' %}</a></p>
-<p><a href="#" id="disable_pv_zeroes">{% trans 'Disable ProductVariations with 0 quantity.' %}</a></p>
+<p><a href="#" id="featured_on">{% trans 'Mark all featured' %}</p>
+<p><a href="#" id="featured_off">{% trans 'Clear all featured' %}</p>
+<p><a href="#" id="disable_all_zeroes">{% trans 'Disable all Products with 0 quantity.' %}</p>
+<p><a href="#" id="disable_pv_zeroes">{% trans 'Disable ProductVariations with 0 quantity.' %}</p>
 
+</form>
 {% else %}
     <p>{% trans "No inventory items." %}</p>
 {% endif %}

satchmo/apps/product/templates/product/admin/inventory_form_lite.html

-{% for field in form %}
-  {% if field.is_hidden %}
-    {{ field }}
-  {% else %}
-    {% ifchanged field.field.slug %}
-      {% if not forloop.first %}
-        </tr>
-      {% endif %}
-      <tr class="{{ field.field.subtypes }}">
-        <td><a href="{% url admin:product_product_change field.field.product_id %}">{{ field.label_tag }}</a></td>
-        <td>{{ field.help_text}}</td>
-    {% endifchanged %}
-      <td>
-    {% if field.errors %}
-      <span class="error">{{ field.errors }}</span><br/>
-  {% endif %}
-  {{ field }}
-    </td>
-  {% endif %}
-{% endfor %}

satchmo/apps/product/urls/base.py

 adminpatterns += patterns('product.views.adminviews',
     (r'^admin/inventory/edit/$', 
         'edit_inventory', {}, 'satchmo_admin_edit_inventory'),
-    (r'^admin/inventory/edit/ajax/$', 
-        'edit_inventory_ajax', {}, 'satchmo_admin_edit_inventory_ajax'),
-    (r'^admin/inventory/edit/ajax/save/$', 
-        'save_inventory_ajax', {}, 'satchmo_admin_save_inventory_ajax'),
     (r'^inventory/export/$',
         'export_products', {}, 'satchmo_admin_product_export'),
     (r'^inventory/import/$', 

satchmo/apps/product/views/adminviews.py

-from django.template import Template, Context
-from django.template.loader import get_template
 from django.contrib.auth.decorators import user_passes_test
 from django.core import urlresolvers
-from django.http import HttpResponse, HttpResponseRedirect
+from django.http import HttpResponseRedirect
 from django.shortcuts import render_to_response
 from django.template import RequestContext
-from django.utils import simplejson
 from django.utils.translation import ugettext as _
-
-from product.forms import VariationManagerForm, InventoryFormLite, ProductExportForm, ProductImportForm
+from product.forms import VariationManagerForm, InventoryForm, ProductExportForm, ProductImportForm
 from product.models import Product
 from product.modules.configurable.models import ConfigurableProduct
 from satchmo_utils.views import bad_or_missing
 
 log = logging.getLogger('product.views.adminviews')
 
-def edit_inventory_ajax(request):
-    
-    position = int(request.GET.get('pos', 0))
-    
-    form = InventoryFormLite(position=position)
-    # straight out of the Ch 4 of the Django Book. aaah! the good ol' days.
-    # (http://www.djangobook.com/en/2.0/chapter04/)
-    t = get_template('product/admin/inventory_form_lite.html')
-    c = Context({'form': form})
-    form_html = t.render(c)
-    
-    response_dict = {"pos": position, "form_html": form_html}
-    return HttpResponse(simplejson.dumps(response_dict), mimetype='application/javascript')
-
-def save_inventory_ajax(request):
-
-    response_dict = {"text_resp": "Hi from Django Land!",}
-    return HttpResponse(simplejson.dumps(response_dict), mimetype='application/javascript')
-    
 def edit_inventory(request):
     """A quick inventory price, qty update form"""
     if request.method == "POST":
         new_data = request.POST.copy()
-        print new_data
-        form = InventoryFormLite(0, new_data)
+        form = InventoryForm(new_data)
         if form.is_valid():
             form.save(request)
             url = urlresolvers.reverse('satchmo_admin_edit_inventory')
             return HttpResponseRedirect(url)
     else:
-        # check if there are any products
-        try: 
-            Product.objects.active().latest('date_added')
-            form = {'fields':True}
-        except Product.DoesNotExist():
-            form = {'fields':False}
+        form = InventoryForm()
 
     ctx = RequestContext(request, {
         'title' : _('Inventory Editor'),

satchmo/apps/satchmo_store/contact/templates/registration/account_info.html

 {% extends "shop/base.html" %}
 {% load i18n %}
 
-{% block title %}{% trans "Account Update" %}{% endblock %}
-
 {% block navbar %}
    <li class="first"><a href="{{ shop_base }}/">{% trans "Home" %}</a></li>
 {% endblock %}

satchmo/apps/satchmo_store/contact/templates/registration/activate.html

 {% load i18n %}
 {% load satchmo_google %}
 
-{% block title %}{% trans "Account Activation" %}{% endblock %}
-
 {% block navbar %}
    <li class="first"><a href="{{ shop_base }}/">{% trans "Home" %}</a></li>
    <li>{% trans "Registration Complete" %}</li>

satchmo/apps/satchmo_store/contact/templates/registration/login.html

 {% extends "shop/base.html" %}
 {% load i18n %}
 
-{% block title %}{% trans "Login" %}{% endblock %}
-
 {% block navbar %}
    <li class="first"><a href="{{ shop_base }}/">{% trans "Home" %}</a></li>
 {% endblock %}

satchmo/apps/satchmo_store/contact/templates/registration/password_change_done.html

 {% extends "shop/base.html" %}
 {% load i18n %}
 
-{% block title %}{% trans "Password Change Done" %}{% endblock %}
-
 {% block navbar %}
    <li class="first"><a href="{{ shop_base }}/">{% trans "Home" %}</a></li>
    {% url satchmo_account_info as accounturl %}

satchmo/apps/satchmo_store/contact/templates/registration/password_change_form.html

 {% extends "shop/base.html" %}
 {% load i18n %}
 
-{% block title %}{% trans "Password Change" %}{% endblock %}
-
 {% block navbar %}
    <li class="first"><a href="{{ shop_base }}/">{% trans "Home" %}</a></li>
    {% url satchmo_account_info as accounturl %}

satchmo/apps/satchmo_store/contact/templates/registration/password_reset_complete.html

 {% extends "shop/base.html" %}
 {% load i18n %}
 
-{% block title %}{% trans "Password Reset Done" %}{% endblock %}
-
 {% block navbar %}
    <li class="first"><a href="{{ shop_base }}/">{% trans "Home" %}</a></li>
 {% endblock %}

satchmo/apps/satchmo_store/contact/templates/registration/password_reset_confirm.html

 {% extends "shop/base.html" %}
 {% load i18n %}
 
-{% block title %}{% trans "Password Reset Confirm" %}{% endblock %}
-
 {% block navbar %}
    <li class="first"><a href="{{ shop_base }}/">{% trans "Home" %}</a></li>
 {% endblock %}

satchmo/apps/satchmo_store/contact/templates/registration/password_reset_done.html

 {% extends "shop/base.html" %}
 {% load i18n %}
 
-{% block title %}{% trans "Password Reset Done" %}{% endblock %}
-
 {% block navbar %}
    <li class="first"><a href="{{ shop_base }}/">{% trans "Home" %}</a></li>
 {% endblock %}

satchmo/apps/satchmo_store/contact/templates/registration/password_reset_form.html

 {% extends "shop/base.html" %}
 {% load i18n %}
 
-{% block title %}{% trans "Password Reset" %}{% endblock %}
-
 {% block navbar %}
    <li class="first"><a href="{{ shop_base }}/">{% trans "Home" %}</a></li>
 {% endblock %}

satchmo/apps/satchmo_store/contact/templates/registration/registration_complete.html

 {% load satchmo_google %}
 {% load i18n %}
 
-{% block title %}{% trans "Registration Complete" %}{% endblock %}
-
 {% block navbar %}
    <li class="first"><a href="{{ shop_base }}/">{% trans "Home" %}</a></li>
    <li>{% trans "Account Creation" %}</li>

satchmo/apps/satchmo_store/contact/templates/registration/registration_form.html

 {% extends "shop/base.html" %}
 {% load i18n %}
 
-{% block title %}{% trans "Registration" %}{% endblock %}
-
 {% block navbar %}
    <li class="first"><a href="{{shop_base}}/">{% trans "Home" %}</a></li>
    <li>{% trans "Registration" %}</li>

satchmo/apps/satchmo_store/contact/templates/registration/repeat_activation.html

 {% extends "shop/base.html" %}
 {% load i18n %}
 
-{% block title %}{% trans "Repeat Activation" %}{% endblock %}
-
 {% block navbar %}
    <li class="first"><a href="{{ shop_base }}/">{% trans "Home" %}</a></li>
    <li>{% trans "Repeat Activation" %}</li>

satchmo/apps/satchmo_store/shop/templates/shop/search.html

 {% load i18n %}
 {% load satchmo_currency satchmo_discounts %}
 
-{% block title %}{% trans "Search" %}{% endblock %}
-
 {% block navbar %}
    <li class="first"><a href="{{ shop_base }}/">{% trans "Home" %}</a></li>
 {% endblock %}

satchmo/static/satchmo/css/blackbird.css

-/*
-  Blackbird - Open Source JavaScript Logging Utility
-  Author: G Scott Olson
-  Web: http://blackbirdjs.googlecode.com/
-       http://www.gscottolson.com/blackbirdjs/
-  Version: 1.0
-
-  The MIT License - Copyright (c) 2008 Blackbird Project
-*/
-#blackbird { margin:0; padding:0; position:fixed; _position:absolute; font:11px/1.3 Consolas, 'Lucida Console', Monaco, monospace; _border:2px solid #BBB;  }
-#blackbird.bbTopLeft { top:0; left:0; _top:expression(eval(document.documentElement.scrollTop+8)); _left:expression(eval(document.documentElement.scrollLeft+8)); }
-#blackbird.bbTopRight { top:0; right:0; }
-* html .bbTopRight { right:auto; top:expression(eval(document.documentElement.scrollTop+8)); left:expression(eval(document.documentElement.scrollLeft+document.documentElement.clientWidth-document.getElementById('blackbird').offsetWidth-8)); }
-#blackbird.bbBottomLeft  { bottom:0; left:0; }
-* html .bbBottomLeft { bottom:auto; top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-document.getElementById('blackbird').offsetHeight-8)); left:expression(eval(document.documentElement.scrollLeft+8)); }
-#blackbird.bbBottomRight { bottom:0; right:0; }
-* html .bbBottomRight { bottom:auto; right:auto; top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-document.getElementById('blackbird').offsetHeight-8)); left:expression(eval(document.documentElement.scrollLeft+document.documentElement.clientWidth-document.getElementById('blackbird').offsetWidth-8)); }
-
-#blackbird.bbSmall { width:300px; _width:272px; }
-  #blackbird.bbSmall .header { _width:272px; }
-  #blackbird.bbSmall .header div.left, #blackbird.bbSmall .footer div.left   { width:150px; }
-  #blackbird.bbSmall .main { _width:272px; }
-  #blackbird.bbSmall .main div { height:200px; }
-  #blackbird.bbSmall .main div.mainBody { width:272px; }
-  #blackbird.bbSmall .footer { _width:272px; }
-
-#blackbird.bbLarge { width:500px; _width:472px; }
-  #blackbird.bbLarge .header { _width:472px; }
-  #blackbird.bbLarge .header div.left, #blackbird.bbLarge .footer div.left { width:350px; }
-  #blackbird.bbLarge .main { _width:472px; }
-  #blackbird.bbLarge .main div { height:500px; }
-  #blackbird.bbLarge .main div.mainBody { width:472px; }
-  #blackbird.bbLarge .footer { _width:472px; }
-
-#blackbird .header span { position:relative; width:16px; height:16px; margin:0 4px; float:left; background-image:url(../images/blackbird_icons.png); background-repeat:no-repeat; }
-	#blackbird .header span.error           { background-position:0px 0px; }
-	#blackbird .header span.errorDisabled   { background-position:-16px 0px; }
-	#blackbird .header span.warn            { background-position:0px -16px; }
-	#blackbird .header span.warnDisabled    { background-position:-16px -16px; }
-	#blackbird .header span.info            { background-position:0px -32px; }
-	#blackbird .header span.infoDisabled    { background-position:-16px -32px; }
-	#blackbird .header span.debug           { background-position:0px -48px; }
-	#blackbird .header span.debugDisabled   { background-position:-16px -48px; }
-	#blackbird .header span.profile         { background-position:0px -64px; }
-	#blackbird .header span.profileDisabled { background-position:-16px -64px; }
-	#blackbird .header span.close           { background-position:0px -80px; }
-	#blackbird .header span.clear           { background-position:-16px -80px; }
-	#blackbird .header span.small           { background-position:0px -96px; }
-	#blackbird .header span.large           { background-position:-16px -96px; }
-
-#blackbird .header > div, #blackbird .main > div, #blackbird .footer > div { background-image:url(../images/blackbird_panel.png); background-repeat:no-repeat; }
-	
-#blackbird .header div { float:left; _background-color:#000; }
-	#blackbird .header div.left { background-position:top left; height:40px; _height:16px; }
-		#blackbird .header .left div.filters { margin-left: -4px; padding:16px 0 0 19px; float:left; _padding:6px 8px; }
-	#blackbird .header div.right { background-position:top right; height:40px; width:150px; _width:122px; _height:16px; }
-		#blackbird .header .right div.controls { padding:16px 24px 0 0; float:right; _padding:6px 8px; }
-		#blackbird .header .right .controls span { margin:0; }
-		#blackbird .header .right .controls span.clear { margin-right:8px; }
-
-#blackbird .main div { float:left; }
-	#blackbird .main div.left { background-position:0 -30px; width:11px; _width:0; }
-	#blackbird .main div.mainBody { background-position:40% -40px; _background-color:#000; _filter:alpha(opacity='93'); }
-		#blackbird .main .mainBody ol { line-height: 1.45; height:100%; overflow:auto; width:100%; list-style-type:none; margin:0; padding:0; }
-		#blackbird .main .mainBody ol li { padding:1px 4px 1px 30px; border-bottom: 1px solid #333; color:#CCC; margin: 2px 2px; _text-indent: -2px; }
-		  #blackbird .main .mainBody ol li span { background:url(../images/blackbird_icons.png) no-repeat 0 0; border: 1px solid #333; height:16px; width:16px; display:block; float:left; margin: -2px 0 1px -25px; _display:inline; }
-		
-#blackbird .main .mainBody ol li.error span   { background-position:0 0; }
-#blackbird .main .mainBody ol li.warn span    { background-position:0 -16px; }
-#blackbird .main .mainBody ol li.info span    { background-position:0 -32px; }
-#blackbird .main .mainBody ol li.debug span   { background-position:0 -48px; }
-#blackbird .main .mainBody ol li.profile span { background-position:0 -64px; }
-
-#blackbird .main .mainBody ol li.profile { color:#DDD; font-style:italic; }
-			
-#blackbird .errorHidden li.error,	#blackbird .warnHidden li.warn,	#blackbird .infoHidden li.info,	#blackbird .debugHidden li.debug,	#blackbird .profileHidden li.profile { display:none; }
-
-#blackbird .main div.right { background:url(../images/blackbird_panel.png) no-repeat 100% -30px; width:17px; _width:0; }
-
-#blackbird .footer div { height:50px; float:left; _background-color:#000; _height:30px; }
-#blackbird .footer div.left { background-position:bottom left; _width:100%  !important; }
-  #blackbird .footer div.left label { display:block;color:#BBB;margin:8px 0 0 16px; position:relative; font-family:Arial,sans-serif; _margin:4px 0 0 8px;}
-    #blackbird .footer div.left label input { padding:0;vertical-align:middle; }
-#blackbird .footer div.right { background-position:bottom right; width:150px; _width:0; }

satchmo/static/satchmo/css/jquery.autocomplete.css

-.ac_results {
-	padding: 0px;
-	border: 1px solid black;
-	background-color: white;
-	overflow: hidden;
-	z-index: 99999;
-}
-
-.ac_results ul {
-	width: 100%;
-	list-style-position: outside;
-	list-style: none;
-	padding: 0;
-	margin: 0;
-}
-
-.ac_results li {
-	margin: 0px;
-	padding: 2px 5px;
-	cursor: default;
-	display: block;
-	/* 
-	if width will be 100% horizontal scrollbar will apear 
-	when scroll mode will be used
-	*/
-	/*width: 100%;*/
-	font: menu;
-	font-size: 12px;
-	/* 
-	it is very important, if line-height not setted or setted 
-	in relative units scroll will be broken in firefox
-	*/
-	line-height: 16px;
-	overflow: hidden;
-}
-
-.ac_loading {
-	background: white url('/static/images/indicator.gif') right center no-repeat;
-}
-
-.ac_odd {
-	background-color: #eee;
-}
-
-.ac_over {
-	background-color: #0A246A;
-	color: white;
-}

satchmo/static/satchmo/css/style.css

-/* @override http://localhost:8000/static/css/style.css */
-
-#container {
-width: 90%;
-margin: 10px auto;
-background-color: #fff;
-color: #333;
-border: 1px solid gray;
-line-height: 130%;
-padding: 0;
-margin-top: 0;
-}
-
-#navbar {
-width: 100%;
-background-color: #fff;
-color: #333;
-line-height: 90%;	
-border: none;
-border-bottom: 1px solid silver;
-}
-
-#top {
-padding: .5em;
-background-color: #ddd;
-border-bottom: 1px solid gray;
-}
-
-#top h1 {
-padding: 0;
-margin: 0;
-}
-
-h5 {
-margin: 0;
-padding: 0;
-}
-
-#sidebar-secondary {
-float: left;
-width: 160px;
-margin: 0;
-padding: 1em;
-}
-
-#sidebar-secondary h3, #sidebar-primary h3 {
-	font-size: 110%;
-	font-weight: bold;
-	margin-bottom: 0.1em;
-	margin-top: 1em;	
-}
-
-#sidebar-primary {
-float: right;
-width: 160px;
-margin: 0;
-padding: 1em;
-background-color: #ddd;
-border-left: 1px solid silver;
-border-bottom: 1px solid silver;
-}
-
-#sidebar-primary .wishlist {
-	padding-top: 10px;
-}
-
-
-#content {
-margin-left: 200px;
-margin-right: 200px;
-padding: 1em;
-}
-
-body {
-	font-family:  "Arial", serif;
-	font-size: 12px;
-	background-color: #555;
-	margin-top: 0px;
-	padding-top: 0px;
-}
-
-#pagination {
-clear:both;
-display: block;
-width:100%;
-float: none;
-padding: 1em;
-}
-
-#pagination ul {
-margin: 0;
-padding: 0;
-text-align: left; 
-font-size: 12px;
-}
-
-#pagination li {
-list-style-type: none;
-display: inline;
-padding-bottom: 1px;
-}
-
-#pagination a, #pagination a:visited {
-padding: 0 5px;
-text-decoration: none; 
-}
-
-#pagination li.currentpage {
-font-weight: bold;
-padding: 0 5px;
-}
-
-#content div.productreviews {
-padding-top: 10px;
-padding-bottom: 10px;
-font-size: 12px;
-}
-
-
-#content div.productreviews h2 {
-    font-size: 14px;
-}
-
-#content div.productreviews span.label {
-	float: left;
-	width: 80px;
-}
-
-#footer {
-clear: both;
-margin: 0;
-padding: .5em;
-color: #333;
-background-color: #ddd;
-border-top: 1px solid gray;
-}
-
-#sidebar-secondary p, #sidebar-primary p { margin: 0 0 1em 0; }
-#content h2 { margin: 0 0 .5em 0; }
-
-.brandcategories {
-    clear: both;
-}
-
-.brandImage,
-.productImage {
-border:solid 1px silver;
-padding:5px;
-float: left;
-margin-top: 10px;
-margin-left: 10px;
-margin-right: 10px;
-margin-bottom:2px;
-text-align: center;
-}
-
-.productImage p {
-text-align: center;
-font-size: 10pt;
-}
-
-#menu_container ul {
-margin: 0;
-padding: 0;
-list-style-type: none;
-}
-
-
-#shipping ul li {
-list-style-type: none;	
-text-decoration: none;
-padding-left: 1em;
-text-indent: -1em;
-}
-
-#checkoutprogress {
-border-style: solid;
-border-width: 1px;
-padding: 3px;
-margin-bottom: 25px;	
-}
-
-#checkoutprogress ul {
-display: inline;
-margin-left: 0;
-padding-left: 0;
-border: none;
-}
-
-#checkoutprogress ul li {
-margin-left: 0;
-padding-left: 2px;
-display: inline;
-list-style: none;
-}
-
-#checkoutprogress ul li:before {
-content: "\0020 \0020 \0020 \00BB \0020";
-display: inline;
-list-style: none;
-}
-
-#checkoutprogress ul li.first:before {
-content: " ";
-}
-
-#checkoutprogress li.active {
-background-color: #ccc;
-}
-
-#wishlist ul li,
-#product_category ul li {
-list-style: none;
-padding: 0.5em;
-border-bottom: 1px dashed #e0e0e0;	
-background-color: white;
-}
-
-#wishlist ul li:hover,
-#product_category ul li:hover {
-	background-color: #f0fff0;
-}
-
-#wishlist ul li a,
-#product_category ul li a {
-	display: block;
-}
-
-#wishlist span.date {
-	font-style: italic;
-	display: block;
-	margin-left: 5px;
-	font-size: 10px;
-}
-
-#wishlist form {
-	display: inline;
-}
-
-#menu_container a {
-display: block;
-color: #FFF;
-background-color: #7F7F7F;
-width: 9em;
-padding: 3px 17px 3px 8px;
-text-decoration: none;
-border-bottom: 1px solid #fff;
-font-weight: bold;
-}
-
-#menu_container a:hover {
-background-color: #B6B6B6;
-color: #FFF;
-}
-
-#menu_container li li a {
-display: block;
-color: #FFF;
-background-color: #C0C0C0;
-width: 9em;
-padding: 3px 8px 3px 17px;
-text-decoration: none;
-border-bottom: 1px solid #fff;
-font-weight: normal;
-}
-
-#menu_container li li li a {
-display: block;
-color: #FFF;
-width: 9em;
-background-color: #C0C0C0;
-padding: 3px 1px 3px 24px;
-text-decoration: none;
-border-bottom: 1px solid #fff;
-font-weight: normal;
-}
-
-#menu_container a.current:before {
-content: "\0020 \0020 \0020 \00BB \0020";
-}
-
-.addressblock {
-padding-top: .5em;
-padding-bottom: .5em;
-}
-
-.profile li {
-list-style-type: none;
-}
-
-table.ordertable {
-width:  100%;
-font-weight: normal;
-font-size: 13px;
-}
-
-table.ordertable thead {
-	background-color: #ddd;
-}
-
-table.ordertable span.orderitemqty {
-	font-style: italic;
-}
-p {
-	line-height: 150%;
-}
-
-.help, p.help {
-        font-size:9px !important; color:#999;
-}
-
-img {
-	border: none;
-}
-
-.error {
-    color: red;
-    text-align: center;
-}
-
-/* =============== Navigation Bars ===================== */
-
-#navbar ul {		
-	margin: 1em;
-	padding: 0px;
-}
-#navbar ul li { 
-	display: inline; 
-	list-style: none; 		
-}
-#navbar ul li { 
-	padding-left: 0.7em; 
-	padding-right: 0.5em; 
-	border-left: 1px solid #b0b0b0; 	
-}  
-#navbar ul li.first {
-	padding-left: 0em; 
-	border-left: none; 
-}
-
-.recentview h3 {
-	padding-bottom: 10px;
-}
-
-.recentitem {
-	padding-bottom: 10px;
-}
-
-div.recentlyadded { 
-    display: block;
-}
-
-.qtyform #id_quantity {
-    width: 5em;
-}
-
-#payment ul li{
-    list-style-type: none;
-}
-
-/* ============ Upsell section ============== */
-
-div.upsell {
-	padding-top: 10px;
-}
-
-div.upsell .upselldescription {
-	padding-bottom: 10px;
-}

satchmo/static/satchmo/images/blackbird_icons.png

Removed
Old image

satchmo/static/satchmo/images/blackbird_panel.png

Removed
Old image

satchmo/static/satchmo/images/indicator.gif

Removed
Old image

satchmo/static/satchmo/images/loading_icon.gif

Removed
Old image

satchmo/static/satchmo/images/productimage-picture-default.jpg

Removed
Old image

satchmo/static/satchmo/images/sample-logo.bmp

Removed
Old image

satchmo/static/satchmo/js/blackbird.js

-/*
-	Blackbird - Open Source JavaScript Logging Utility
-	Author: G Scott Olson
-	Web: http://blackbirdjs.googlecode.com/
-	     http://www.gscottolson.com/blackbirdjs/
-	Version: 1.0
-
-	The MIT License - Copyright (c) 2008 Blackbird Project
-*/
-( function() {
-	var NAMESPACE = 'log';
-	var IE6_POSITION_FIXED = true; // enable IE6 {position:fixed}
-	
-	var bbird;
-	var outputList;
-	var cache = [];
-	
-	var state = getState();
-	var classes = {};
-	var profiler = {};
-	var IDs = {
-		blackbird: 'blackbird',
-		checkbox: 'bbVis',
-		filters: 'bbFilters',
-		controls: 'bbControls',
-		size: 'bbSize'
-	}
-	var messageTypes = { //order of these properties imply render order of filter controls
-		debug: true,
-		info: true,
-		warn: true,
-		error: true,
-		profile: true
-	};
-	
-	function generateMarkup() { //build markup
-		var spans = [];
-		for ( type in messageTypes ) {
-			spans.push( [ '<span class="', type, '" type="', type, '"></span>'].join( '' ) );
-		}
-
-		var newNode = document.createElement( 'DIV' );
-		newNode.id = IDs.blackbird;
-		newNode.style.display = 'none';
-		newNode.innerHTML = [
-			'<div class="header">',
-				'<div class="left">',
-					'<div id="', IDs.filters, '" class="filters" title="click to filter by message type">', spans.join( '' ), '</div>',
-				'</div>',
-				'<div class="right">',
-					'<div id="', IDs.controls, '" class="controls">',
-						'<span id="', IDs.size ,'" title="contract" op="resize"></span>',
-						'<span class="clear" title="clear" op="clear"></span>',
-						'<span class="close" title="close" op="close"></span>',
-					'</div>',
-				'</div>',
-			'</div>',
-			'<div class="main">',
-				'<div class="left"></div><div class="mainBody">',
-					'<ol>', cache.join( '' ), '</ol>',
-				'</div><div class="right"></div>',
-			'</div>',
-			'<div class="footer">',
-				'<div class="left"><label for="', IDs.checkbox, '"><input type="checkbox" id="', IDs.checkbox, '" />Visible on page load</label></div>',
-				'<div class="right"></div>',
-			'</div>'
-		].join( '' );
-		return newNode;
-	}
-
-	function backgroundImage() { //(IE6 only) change <BODY> tag's background to resolve {position:fixed} support
-		var bodyTag = document.getElementsByTagName( 'BODY' )[ 0 ];
-		
-		if ( bodyTag.currentStyle && IE6_POSITION_FIXED ) {
-			if (bodyTag.currentStyle.backgroundImage == 'none' ) {
-				bodyTag.style.backgroundImage = 'url(about:blank)';
-			}
-			if (bodyTag.currentStyle.backgroundAttachment == 'scroll' ) {
-				bodyTag.style.backgroundAttachment = 'fixed';
-			}
-		}
-	}
-
-	function addMessage( type, content ) { //adds a message to the output list
-		content = ( content.constructor == Array ) ? content.join( '' ) : content;
-		if ( outputList ) {
-			var newMsg = document.createElement( 'LI' );
-			newMsg.className = type;
-			newMsg.innerHTML = [ '<span class="icon"></span>', content ].join( '' );
-			outputList.appendChild( newMsg );
-			scrollToBottom();
-		} else {
-			cache.push( [ '<li class="', type, '"><span class="icon"></span>', content, '</li>' ].join( '' ) );
-		}
-	}
-	
-	function clear() { //clear list output
-		outputList.innerHTML = '';
-	}
-	
-	function clickControl( evt ) {
-		if ( !evt ) evt = window.event;
-		var el = ( evt.target ) ? evt.target : evt.srcElement;
-
-		if ( el.tagName == 'SPAN' ) {
-			switch ( el.getAttributeNode( 'op' ).nodeValue ) {
-				case 'resize': resize(); break;
-				case 'clear':  clear();  break;
-				case 'close':  hide();   break;
-			}
-		}
-	}
-	
-	function clickFilter( evt ) { //show/hide a specific message type
-		if ( !evt ) evt = window.event;
-		var span = ( evt.target ) ? evt.target : evt.srcElement;
-
-		if ( span && span.tagName == 'SPAN' ) {
-
-			var type = span.getAttributeNode( 'type' ).nodeValue;
-
-			if ( evt.altKey ) {
-				var filters = document.getElementById( IDs.filters ).getElementsByTagName( 'SPAN' );
-
-				var active = 0;
-				for ( entry in messageTypes ) {
-					if ( messageTypes[ entry ] ) active++;
-				}
-				var oneActiveFilter = ( active == 1 && messageTypes[ type ] );
-
-				for ( var i = 0; filters[ i ]; i++ ) {
-					var spanType = filters[ i ].getAttributeNode( 'type' ).nodeValue;
-
-					filters[ i ].className = ( oneActiveFilter || ( spanType == type ) ) ? spanType : spanType + 'Disabled';
-					messageTypes[ spanType ] = oneActiveFilter || ( spanType == type );
-				}
-			}
-			else {
-				messageTypes[ type ] = ! messageTypes[ type ];
-				span.className = ( messageTypes[ type ] ) ? type : type + 'Disabled';
-			}
-
-			//build outputList's class from messageTypes object
-			var disabledTypes = [];
-			for ( type in messageTypes ) {
-				if ( ! messageTypes[ type ] ) disabledTypes.push( type );
-			}
-			disabledTypes.push( '' );
-			outputList.className = disabledTypes.join( 'Hidden ' );
-
-			scrollToBottom();
-		}
-	}
-
-	function clickVis( evt ) {
-		if ( !evt ) evt = window.event;
-		var el = ( evt.target ) ? evt.target : evt.srcElement;
-
-		state.load = el.checked;
-		setState();
-	}
-	
-	
-	function scrollToBottom() { //scroll list output to the bottom
-		outputList.scrollTop = outputList.scrollHeight;
-	}
-	
-	function isVisible() { //determine the visibility
-		return ( bbird.style.display == 'block' );
-	}
-
-	function hide() { 
-	  bbird.style.display = 'none';
-	}
-			
-	function show() {
-		var body = document.getElementsByTagName( 'BODY' )[ 0 ];
-		body.removeChild( bbird );
-		body.appendChild( bbird );
-		bbird.style.display = 'block';
-	}
-	
-	//sets the position
-	function reposition( position ) {
-		if ( position === undefined || position == null ) {
-			position = ( state && state.pos === null ) ? 1 : ( state.pos + 1 ) % 4; //set to initial position ('topRight') or move to next position
-		}
-				
-		switch ( position ) {
-			case 0: classes[ 0 ] = 'bbTopLeft'; break;
-			case 1: classes[ 0 ] = 'bbTopRight'; break;
-			case 2: classes[ 0 ] = 'bbBottomLeft'; break;
-			case 3: classes[ 0 ] = 'bbBottomRight'; break;
-		}
-		state.pos = position;
-		setState();
-	}
-
-	function resize( size ) {
-		if ( size === undefined || size === null ) {
-			size = ( state && state.size == null ) ? 0 : ( state.size + 1 ) % 2;
-	  	}
-
-		classes[ 1 ] = ( size === 0 ) ? 'bbSmall' : 'bbLarge'
-
-		var span = document.getElementById( IDs.size );
-		span.title = ( size === 1 ) ? 'small' : 'large';
-		span.className = span.title;	  
-
-		state.size = size;
-		setState();
-		scrollToBottom();
-	}
-
-	function setState() {
-		var props = [];
-		for ( entry in state ) {
-			var value = ( state[ entry ] && state[ entry ].constructor === String ) ? '"' + state[ entry ] + '"' : state[ entry ]; 
-			props.push( entry + ':' + value );
-		}
-		props = props.join( ',' );
-		
-		var expiration = new Date();
-		expiration.setDate( expiration.getDate() + 14 );
-		document.cookie = [ 'blackbird={', props, '}; expires=', expiration.toUTCString() ,';' ].join( '' );
-
-		var newClass = [];
-		for ( word in classes ) {
-			newClass.push( classes[ word ] );
-		}
-		bbird.className = newClass.join( ' ' );
-	}
-	
-	function getState() {
-		var re = new RegExp( /blackbird=({[^;]+})(;|\b|$)/ );
-		var match = re.exec( document.cookie );
-		return ( match && match[ 1 ] ) ? eval( '(' + match[ 1 ] + ')' ) : { pos:null, size:null, load:null };
-	}
-	
-	//event handler for 'keyup' event for window
-	function readKey( evt ) {
-		if ( !evt ) evt = window.event;
-		var code = 113; //F2 key
-					
-		if ( evt && evt.keyCode == code ) {
-					
-			var visible = isVisible();
-					
-			if ( visible && evt.shiftKey && evt.altKey ) clear();
-			else if	 (visible && evt.shiftKey ) reposition();
-			else if ( !evt.shiftKey && !evt.altKey ) {
-			  ( visible ) ? hide() : show();
-			}
-		}
-	}
-
-	//event management ( thanks John Resig )
-	function addEvent( obj, type, fn ) {
-		var obj = ( obj.constructor === String ) ? document.getElementById( obj ) : obj;
-		if ( obj.attachEvent ) {
-			obj[ 'e' + type + fn ] = fn;
-			obj[ type + fn ] = function(){ obj[ 'e' + type + fn ]( window.event ) };
-			obj.attachEvent( 'on' + type, obj[ type + fn ] );
-		} else obj.addEventListener( type, fn, false );
-	}
-	function removeEvent( obj, type, fn ) {
-		var obj = ( obj.constructor === String ) ? document.getElementById( obj ) : obj;
-		if ( obj.detachEvent ) {
-			obj.detachEvent( 'on' + type, obj[ type + fn ] );
-			obj[ type + fn ] = null;
-	  } else obj.removeEventListener( type, fn, false );
-	}
-
-	window[ NAMESPACE ] = {
-		toggle:
-			function() { ( isVisible() ) ? hide() : show(); },
-		resize:
-			function() { resize(); },
-		clear:
-			function() { clear(); },
-		move:
-			function() { reposition(); },
-		debug: 
-			function( msg ) { addMessage( 'debug', msg ); },
-		warn:
-			function( msg ) { addMessage( 'warn', msg ); },
-		info:
-			function( msg ) { addMessage( 'info', msg ); },
-		error:
-			function( msg ) { addMessage( 'error', msg ); },
-		profile: 
-			function( label ) {
-				var currentTime = new Date(); //record the current time when profile() is executed
-				
-				if ( label == undefined || label == '' ) {
-					addMessage( 'error', '<b>ERROR:</b> Please specify a label for your profile statement' );
-				}
-				else if ( profiler[ label ] ) {
-					addMessage( 'profile', [ label, ': ', currentTime - profiler[ label ],	'ms' ].join( '' ) );
-					delete profiler[ label ];
-				}
-				else {
-					profiler[ label ] = currentTime;
-					addMessage( 'profile', label );
-				}
-				return currentTime;
-			}
-	}
-
-	addEvent( window, 'load', 
-		/* initialize Blackbird when the page loads */
-		function() {
-			var body = document.getElementsByTagName( 'BODY' )[ 0 ];
-			bbird = body.appendChild( generateMarkup() );
-			outputList = bbird.getElementsByTagName( 'OL' )[ 0 ];
-		
-			backgroundImage();
-		
-			//add events
-			addEvent( IDs.checkbox, 'click', clickVis );
-			addEvent( IDs.filters, 'click', clickFilter );
-			addEvent( IDs.controls, 'click', clickControl );
-			addEvent( document, 'keyup', readKey);
-
-			resize( state.size );
-			reposition( state.pos );
-			if ( state.load ) {
-				show();
-				document.getElementById( IDs.checkbox ).checked = true; 
-			}
-
-			scrollToBottom();
-
-			window[ NAMESPACE ].init = function() {
-				show();
-				window[ NAMESPACE ].error( [ '<b>', NAMESPACE, '</b> can only be initialized once' ] );
-			}
-
-			addEvent( window, 'unload', function() {
-				removeEvent( IDs.checkbox, 'click', clickVis );
-				removeEvent( IDs.filters, 'click', clickFilter );
-				removeEvent( IDs.controls, 'click', clickControl );
-				removeEvent( document, 'keyup', readKey );
-			});
-		});
-})();

satchmo/static/satchmo/js/jquery-1.4.2.js

-/*!
- * jQuery JavaScript Library v1.4.2
- * http://jquery.com/
- *
- * Copyright 2010, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2010, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Sat Feb 13 22:33:48 2010 -0500
- */
-(function( window, undefined ) {
-
-// Define a local copy of jQuery
-var jQuery = function( selector, context ) {
-		// The jQuery object is actually just the init constructor 'enhanced'
-		return new jQuery.fn.init( selector, context );
-	},
-
-	// Map over jQuery in case of overwrite
-	_jQuery = window.jQuery,
-
-	// Map over the $ in case of overwrite
-	_$ = window.$,
-
-	// Use the correct document accordingly with window argument (sandbox)
-	document = window.document,
-
-	// A central reference to the root jQuery(document)
-	rootjQuery,
-
-	// A simple way to check for HTML strings or ID strings
-	// (both of which we optimize for)
-	quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,
-
-	// Is it a simple selector
-	isSimple = /^.[^:#\[\.,]*$/,
-
-	// Check if a string has a non-whitespace character in it
-	rnotwhite = /\S/,
-
-	// Used for trimming whitespace
-	rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g,
-
-	// Match a standalone tag
-	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-
-	// Keep a UserAgent string for use with jQuery.browser
-	userAgent = navigator.userAgent,
-
-	// For matching the engine and version of the browser
-	browserMatch,
-	
-	// Has the ready events already been bound?
-	readyBound = false,
-	
-	// The functions to execute on DOM ready
-	readyList = [],
-
-	// The ready event handler
-	DOMContentLoaded,
-
-	// Save a reference to some core methods
-	toString = Object.prototype.toString,
-	hasOwnProperty = Object.prototype.hasOwnProperty,
-	push = Array.prototype.push,
-	slice = Array.prototype.slice,
-	indexOf = Array.prototype.indexOf;
-
-jQuery.fn = jQuery.prototype = {
-	init: function( selector, context ) {
-		var match, elem, ret, doc;
-
-		// Handle $(""), $(null), or $(undefined)
-		if ( !selector ) {
-			return this;
-		}
-
-		// Handle $(DOMElement)
-		if ( selector.nodeType ) {
-			this.context = this[0] = selector;
-			this.length = 1;
-			return this;
-		}
-		
-		// The body element only exists once, optimize finding it
-		if ( selector === "body" && !context ) {
-			this.context = document;
-			this[0] = document.body;
-			this.selector = "body";
-			this.length = 1;
-			return this;
-		}
-
-		// Handle HTML strings
-		if ( typeof selector === "string" ) {
-			// Are we dealing with HTML string or an ID?
-			match = quickExpr.exec( selector );
-
-			// Verify a match, and that no context was specified for #id
-			if ( match && (match[1] || !context) ) {
-
-				// HANDLE: $(html) -> $(array)
-				if ( match[1] ) {
-					doc = (context ? context.ownerDocument || context : document);
-
-					// If a single string is passed in and it's a single tag
-					// just do a createElement and skip the rest
-					ret = rsingleTag.exec( selector );
-
-					if ( ret ) {
-						if ( jQuery.isPlainObject( context ) ) {
-							selector = [ document.createElement( ret[1] ) ];
-							jQuery.fn.attr.call( selector, context, true );
-
-						} else {
-							selector = [ doc.createElement( ret[1] ) ];
-						}
-
-					} else {
-						ret = buildFragment( [ match[1] ], [ doc ] );
-						selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;
-					}
-					
-					return jQuery.merge( this, selector );
-					
-				// HANDLE: $("#id")
-				} else {
-					elem = document.getElementById( match[2] );
-
-					if ( elem ) {
-						// Handle the case where IE and Opera return items
-						// by name instead of ID
-						if ( elem.id !== match[2] ) {
-							return rootjQuery.find( selector );
-						}
-
-						// Otherwise, we inject the element directly into the jQuery object
-						this.length = 1;
-						this[0] = elem;
-					}
-
-					this.context = document;
-					this.selector = selector;
-					return this;
-				}
-
-			// HANDLE: $("TAG")
-			} else if ( !context && /^\w+$/.test( selector ) ) {
-				this.selector = selector;
-				this.context = document;
-				selector = document.getElementsByTagName( selector );
-				return jQuery.merge( this, selector );
-
-			// HANDLE: $(expr, $(...))
-			} else if ( !context || context.jquery ) {
-				return (context || rootjQuery).find( selector );
-
-			// HANDLE: $(expr, context)
-			// (which is just equivalent to: $(context).find(expr)
-			} else {
-				return jQuery( context ).find( selector );
-			}
-
-		// HANDLE: $(function)
-		// Shortcut for document ready
-		} else if ( jQuery.isFunction( selector ) ) {
-			return rootjQuery.ready( selector );
-		}
-
-		if (selector.selector !== undefined) {
-			this.selector = selector.selector;
-			this.context = selector.context;
-		}
-
-		return jQuery.makeArray( selector, this );
-	},
-
-	// Start with an empty selector
-	selector: "",
-
-	// The current version of jQuery being used
-	jquery: "1.4.2",
-
-	// The default length of a jQuery object is 0
-	length: 0,
-
-	// The number of elements contained in the matched element set
-	size: function() {
-		return this.length;
-	},
-
-	toArray: function() {
-		return slice.call( this, 0 );
-	},
-
-	// Get the Nth element in the matched element set OR
-	// Get the whole matched element set as a clean array
-	get: function( num ) {
-		return num == null ?
-
-			// Return a 'clean' array
-			this.toArray() :
-
-			// Return just the object
-			( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );
-	},
-
-	// Take an array of elements and push it onto the stack
-	// (returning the new matched element set)
-	pushStack: function( elems, name, selector ) {
-		// Build a new jQuery matched element set
-		var ret = jQuery();
-
-		if ( jQuery.isArray( elems ) ) {
-			push.apply( ret, elems );
-		
-		} else {
-			jQuery.merge( ret, elems );
-		}
-
-		// Add the old object onto the stack (as a reference)
-		ret.prevObject = this;
-
-		ret.context = this.context;
-
-		if ( name === "find" ) {
-			ret.selector = this.selector + (this.selector ? " " : "") + selector;
-		} else if ( name ) {
-			ret.selector = this.selector + "." + name + "(" + selector + ")";
-		}
-
-		// Return the newly-formed element set
-		return ret;
-	},
-
-	// Execute a callback for every element in the matched set.
-	// (You can seed the arguments with an array of args, but this is
-	// only used internally.)
-	each: function( callback, args ) {
-		return jQuery.each( this, callback, args );
-	},
-	
-	ready: function( fn ) {
-		// Attach the listeners
-		jQuery.bindReady();
-
-		// If the DOM is already ready
-		if ( jQuery.isReady ) {
-			// Execute the function immediately
-			fn.call( document, jQuery );
-
-		// Otherwise, remember the function for later
-		} else if ( readyList ) {
-			// Add the function to the wait list
-			readyList.push( fn );
-		}
-
-		return this;
-	},
-	
-	eq: function( i ) {
-		return i === -1 ?
-			this.slice( i ) :
-			this.slice( i, +i + 1 );
-	},
-
-	first: function() {
-		return this.eq( 0 );
-	},
-
-	last: function() {
-		return this.eq( -1 );
-	},
-
-	slice: function() {
-		return this.pushStack( slice.apply( this, arguments ),
-			"slice", slice.call(arguments).join(",") );
-	},
-
-	map: function( callback ) {
-		return this.pushStack( jQuery.map(this, function( elem, i ) {
-			return callback.call( elem, i, elem );
-		}));
-	},
-	
-	end: function() {
-		return this.prevObject || jQuery(null);
-	},
-
-	// For internal use only.
-	// Behaves like an Array's method, not like a jQuery method.
-	push: push,
-	sort: [].sort,
-	splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
-	// copy reference to target object
-	var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy;
-
-	// Handle a deep copy situation
-	if ( typeof target === "boolean" ) {
-		deep = target;
-		target = arguments[1] || {};
-		// skip the boolean and the target
-		i = 2;
-	}
-
-	// Handle case when target is a string or something (possible in deep copy)
-	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
-		target = {};
-	}
-
-	// extend jQuery itself if only one argument is passed
-	if ( length === i ) {
-		target = this;
-		--i;
-	}
-
-	for ( ; i < length; i++ ) {
-		// Only deal with non-null/undefined values
-		if ( (options = arguments[ i ]) != null ) {
-			// Extend the base object
-			for ( name in options ) {
-				src = target[ name ];
-				copy = options[ name ];
-
-				// Prevent never-ending loop
-				if ( target === copy ) {
-					continue;
-				}
-
-				// Recurse if we're merging object literal values or arrays
-				if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) {
-					var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src
-						: jQuery.isArray(copy) ? [] : {};
-
-					// Never move original objects, clone them
-					target[ name ] = jQuery.extend( deep, clone, copy );
-
-				// Don't bring in undefined values
-				} else if ( copy !== undefined ) {
-					target[ name ] = copy;
-				}
-			}
-		}
-	}
-
-	// Return the modified object
-	return target;
-};
-
-jQuery.extend({
-	noConflict: function( deep ) {
-		window.$ = _$;
-
-		if ( deep ) {
-			window.jQuery = _jQuery;
-		}
-
-		return jQuery;
-	},
-	
-	// Is the DOM ready to be used? Set to true once it occurs.
-	isReady: false,
-	
-	// Handle when the DOM is ready
-	ready: function() {
-		// Make sure that the DOM is not already loaded
-		if ( !jQuery.isReady ) {
-			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-			if ( !document.body ) {
-				return setTimeout( jQuery.ready, 13 );
-			}
-
-			// Remember that the DOM is ready
-			jQuery.isReady = true;
-
-			// If there are functions bound, to execute
-			if ( readyList ) {
-				// Execute all of them
-				var fn, i = 0;
-				while ( (fn = readyList[ i++ ]) ) {
-					fn.call( document, jQuery );
-				}
-
-				// Reset the list of functions
-				readyList = null;
-			}
-
-			// Trigger any bound ready events
-			if ( jQuery.fn.triggerHandler ) {
-				jQuery( document ).triggerHandler( "ready" );
-			}
-		}
-	},
-	
-	bindReady: function() {
-		if ( readyBound ) {
-			return;
-		}
-
-		readyBound = true;
-
-		// Catch cases where $(document).ready() is called after the
-		// browser event has already occurred.
-		if ( document.readyState === "complete" ) {
-			return jQuery.ready();
-		}
-
-		// Mozilla, Opera and webkit nightlies currently support this event
-		if ( document.addEventListener ) {
-			// Use the handy event callback
-			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-			
-			// A fallback to window.onload, that will always work
-			window.addEventListener( "load", jQuery.ready, false );
-
-		// If IE event model is used
-		} else if ( document.attachEvent ) {
-			// ensure firing before onload,
-			// maybe late but safe also for iframes
-			document.attachEvent("onreadystatechange", DOMContentLoaded);
-			
-			// A fallback to window.onload, that will always work
-			window.attachEvent( "onload", jQuery.ready );
-
-			// If IE and not a frame
-			// continually check to see if the document is ready
-			var toplevel = false;
-
-			try {
-				toplevel = window.frameElement == null;
-			} catch(e) {}
-
-			if ( document.documentElement.doScroll && toplevel ) {
-				doScrollCheck();
-			}
-		}
-	},
-
-	// See test/unit/core.js for details concerning isFunction.
-	// Since version 1.3, DOM methods and functions like alert
-	// aren't supported. They return false on IE (#2968).
-	isFunction: function( obj ) {
-		return toString.call(obj) === "[object Function]";
-	},
-
-	isArray: function( obj ) {
-		return toString.call(obj) === "[object Array]";
-	},
-
-	isPlainObject: function( obj ) {
-		// Must be an Object.
-		// Because of IE, we also have to check the presence of the constructor property.
-		// Make sure that DOM nodes and window objects don't pass through, as well
-		if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) {
-			return false;
-		}
-		
-		// Not own constructor property must be Object
-		if ( obj.constructor
-			&& !hasOwnProperty.call(obj, "constructor")
-			&& !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) {
-			return false;
-		}
-		
-		// Own properties are enumerated firstly, so to speed up,
-		// if last one is own, then all properties are own.
-	
-		var key;
-		for ( key in obj ) {}
-		
-		return key === undefined || hasOwnProperty.call( obj, key );
-	},
-
-	isEmptyObject: function( obj ) {
-		for ( var name in obj ) {
-			return false;
-		}
-		return true;
-	},
-	
-	error: function( msg ) {
-		throw msg;
-	},
-	
-	parseJSON: function( data ) {
-		if ( typeof data !== "string" || !data ) {
-			return null;
-		}
-
-		// Make sure leading/trailing whitespace is removed (IE can't handle it)
-		data = jQuery.trim( data );
-		
-		// Make sure the incoming data is actual JSON
-		// Logic borrowed from http://json.org/json2.js
-		if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
-			.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
-			.replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {
-
-			// Try to use the native JSON parser first
-			return window.JSON && window.JSON.parse ?