function cart(email) {this.totalItems = 0;
this.totalPrice= 0.00;
this.items = new Array();
this.userEmail = email;this.ItemColumns = ['Image','Name','Price','Options','Quantity','Total'];
this.initialize = function () {if(!readCookie("buy")) {this.totalItems  = 0;
this.totalPrice = 0.00;} else {data = readCookie("buy").split("&");
this.totalItems = data[0]*1;
this.totalPrice = data[1]*1;
for(x=2;x < (data.length);x++) {newItem = new item();
itemData = data[x].split(",");
i=0;
for(i=0;i<itemData.length;i++) {pair = itemData[i].split('=');
newItem.addValue(pair[0],pair[1]);}if(!newItem.getValue('name') || !newItem.getValue('price') || !newItem.getValue('quantity')) {alert("item must have price, name, and quantity!"); return false;}this.items[x-2] = newItem;}}
this.setUpEvents();
this.updateCookie();
this.updatePageElements(); return;};
this.checkOutEvent = function() {buy.checkOut(); return false;};
this.emptyEvent = function() {buy.empty(); return false;};
this.setUpEvents = function() {var x=0,element,elements = getElementsByClassName('buy_total');x=0;
elements = getElementsByClassName('buy_checkout');
for(x=0;x<elements.length;x++) {element = elements[x];
if(element.addEventListener) {element.addEventListener("click", this.checkOutEvent, false);} else if(element.attachEvent) {  element.attachEvent("onclick", this.checkOutEvent);}}
x=0;
elements = getElementsByClassName('buy_empty');
for(x=0;x<elements.length;x++) {element = elements[x];
if(element.addEventListener) {element.addEventListener("click", this.emptyEvent, false);} else if(element.attachEvent) {  element.attachEvent("onclick", this.emptyEvent);}}
return;};this.add = function() {newItem = new item();
var x=0;
for(x=0;x<arguments.length;x++){temp = arguments[x];
data = temp.split('=');
newItem.addValue(data[0],data[1]);}if(!newItem.getValue('name') || !newItem.getValue('price')) {alert('Sorry, this photo is temporary unavailable for purchase.'); return false;}isnew = true;
if(!newItem.getValue('quantity')) {newItem.addValue('quantity',1);}this.totalItems = this.totalItems + newItem.getValue('quantity');
x=0;
for(x=0;x < this.items.length;x++) {tempItem = this.items[x];
if(tempItem.equalTo(newItem)) {
tempItem.addValue('quantity' , (parseInt(tempItem.getValue('quantity')) + parseInt(newItem.getValue('quantity'))));
this.totalPrice = this.totalPrice + parseFloat(tempItem.getValue('price'));
isnew = false;}}
if(isnew) {this.items[this.items.length] = newItem;
this.totalPrice = this.totalPrice + parseFloat(newItem.getValue('price'));}this.updateCookie();
this.updatePageElements();
alert('Thank you. The photo ' + newItem.getValue('name') + ' is added to your shopping cart.'); return;};this.addItem = function(newItem) {var x=0;
for(x=0;x<this.items.length;x++) {var tempItem = this.items[x];
if(tempItem.equalTo(newItem)){tempItem.addValue('quantity', parseInt(newItem.getValue('quantity')) + parseInt(tempItem.getValue('quantity')));
this.totalItems = this.totalItems + parseInt(newItem.getValue('quantity'));
this.totalPrice = this.totalPrice + parseInt(newItem.getValue('quantity'))*parseFloat(newItem.getValue('price')); return;}}
this.items[this.items.length] = newItem;
this.totalItems = this.totalItems + parseInt(newItem.getValue('quantity'));
this.totalPrice = this.totalPrice + parseInt(newItem.getValue('quantity'))*parseFloat(newItem.getValue('price')); return;};this.updateCookie = function () {cookieString = String(this.totalItems) + "&" + String(this.totalPrice);
x=0;
for(x=0;x<this.items.length;x++) {tempItem = this.items[x];
cookieString = cookieString + "&" + tempItem.cookieString();}createCookie("buy", cookieString, 30);}
this.empty = function () {this.items = new Array();
this.totalItems = 0;
this.totalPrice = 0.00;
this.updateCookie();
this.updatePageElements(); return false;};this.deleteItem = function(item) {  
found = false;
var temp = new Array();
for(x=0; x < this.items.length;x++) {tempItem = this.items[x];
if(tempItem.equalTo(item)) {found = true;
this.totalItems = this.totalItems - parseFloat(tempItem.getValue('quantity'));
this.totalPrice = this.totalPrice - parseFloat(tempItem.getValue('price'));}if(found) {if(x < (this.items.length - 1)) {temp[x] = this.items[x+1];} 
} else {temp[x] = this.items[x];}}
this.items = temp;
this.updateCookie();
this.updatePageElements(); return false;};this.options = function() {var x=0;
for(x=0;x<this.items.length;x++) {var temp = this.items[x];
if(temp.optionList()) {return true;}}
return false;};this.updatePageElements = function() {var x=0,element,elements = getElementsByClassName('buy_total');
for(x=0;x<elements.length;x++) {element = elements[x];
element.innerHTML = this.returnTotalPrice();}x=0;
elements = getElementsByClassName('buy_quantity');
for(x=0;x<elements.length;x++) {element = elements[x];
element.innerHTML = String(this.totalItems);}elements = getElementsByClassName('buy_items');
for(x=0;x<elements.length;x++) {cartTable = elements[x];
newRow = document.createElement('div');
var x=0,i=0;
while (cartTable.childNodes[0]) {    cartTable.removeChild(cartTable.childNodes[0]);}
for(x=0;x<this.ItemColumns.length;x++) {if(this.ItemColumns[x] != 'Options' || this.options()) {tempCell = document.createElement('div');
tempCell.innerHTML = this.ItemColumns[x];
tempCell.className = "item" + this.ItemColumns[x];
newRow.appendChild(tempCell);}}
newRow.className = "cartHeaders";
cartTable.appendChild(newRow);// create a row for each item
x=0;
for(x=0;x<this.items.length;x++) {tempItem = this.items[x];
newRow = document.createElement('div');
i=0;
for(i=0;i<this.ItemColumns.length;i++) {tempCell = document.createElement('div');
tempCell.className = "item" + this.ItemColumns[i];
if(this.ItemColumns[i] == 'Image') {if(tempItem.getValue('image')) {tempCell.innerHTML = '<img src="' + tempItem.getValue('image') + '" />';}}
if(this.ItemColumns[i] == 'Name') {tempCell.innerHTML = tempItem.getValue('name');} else if (this.ItemColumns[i] == 'Price') {tempCell.innerHTML = this.returnFormattedPrice(tempItem.getValue('price'));} else if (this.ItemColumns[i] == 'Options' && this.options()) {tempCell.innerHTML = tempItem.optionList();} else if (this.ItemColumns[i] == 'Quantity') {tempCell.innerHTML = '<input id=photoquantity size=1 type="text" onblur="buy.updateQuantity(' + tempItem.functionString() +',\'new_quantity=\' + this.value);return false;"value="' + tempItem.getValue('quantity') + '" />';} else if (this.ItemColumns[i] == 'Total') {tempCell.innerHTML = this.returnFormattedPrice(tempItem.getValue('quantity')* tempItem.getValue('price'));}newRow.appendChild(tempCell);}newRow.className = "itemContainer"
cartTable.appendChild(newRow);}
newRow = document.createElement('div');tempCell = document.createElement('div');tempCell.innerHTML = String(this.totalItems);tempCell.className = "totalItems";newRow.appendChild(tempCell);tempCell = document.createElement('div');tempCell.innerHTML = this.returnTotalPrice();tempCell.className = "totalPrice";newRow.appendChild(tempCell);newRow.className = "totalRow";cartTable.appendChild(newRow);}return false;};this.returnTotalPrice = function() {return this.returnFormattedPrice(this.totalPrice);};
this.returnFormattedPrice = function(price) {temp = Math.round(price*100);
change = String(temp%100);
if(change.length == 0) {change = "00";} else if(change.length == 1) {change = "0" + change;}
temp = temp/100; return temp;};this.updateQuantity = function() {newItem = new item();
x=0;
for(x=0;x<arguments.length;x++){temp = arguments[x];
data = temp.split('=');
if(data[0] == 'new_quantity') {var new_quantity = data[1];} else {newItem.addValue(data[0],data[1]);}}
if(new_quantity < 1) {this.deleteItem(newItem); return;}newQuan = new_quantity - newItem.getValue('quantity');
newItem.addValue('quantity', newQuan);
this.addItem(newItem);
this.updateCookie();
this.updatePageElements(); return false;}
this.checkOut = function() {if(this.totalItems == 0){alert("Your shopping cart is empty. Please add the photos first."); return false;} 
var winpar = "scrollbars,location,resizable,status"; var i,j=0,des,counter;var strn  = "https://www.2checkout.com/2co/buyer/purchase?sid=33364" + "&id_type=1" + "&total=" + this.returnFormattedPrice(this.totalPrice) + "&cart_order_id=PHOTOS";counter = 0;
for (counter = 0; counter < this.items.length; counter++) {tempItem = this.items[counter];j = counter + 1; 
strn = strn + "&c_prod_" + j + "=" + tempItem.getValue('name') + "," + tempItem.getValue('quantity') + "&c_name_" + j + "=" + "Photo " + tempItem.getValue('name') + "&c_price_" + j + "=" + tempItem.getValue('price')  + "&c_description_" + j + "=" + "Royalty-free jpeg image. Limited time offer - $" + tempItem.getValue('price');
if(tempItem.optionList()) {strn = strn + "&os0_"+ j + "=" + " " + "&on0_"+ j + "=" + tempItem.optionList();}}
window.open (strn, "paypal", winpar); return false;};}function item () {this.names= new Array();
this.values= new Array();
this.addValue = function(name,value) {if(this.names.length != this.values.length) {alert("name and value array lengths do not match for this item!"); return false;}found = false;
var a=0;
for(a=0;a<this.names.length;a++) {if(this.names[a] == name) {this.values[a] = value; return;}}
if(!found) {this.names[this.names.length]= name;
this.values[this.values.length]= value;}return;};
this.getValue = function(name) {var g=0;
for(g=0;g<this.names.length;g++) {if(name==this.names[g]) {return this.values[g];}}
return null;};
this.equalTo = function(item) {if(this.getSize() != item.getSize()) {return false;} 
var q=0;
for(q=0;q<this.names.length;q++) {if(this.names[q] != 'quantity' && (item.getValue(this.names[q]) != this.values[q])) {return false;}}
return true;};
this.getSize = function() {return this.names.length;};
this.cookieString = function() {returnString = '';
var i=0; returnString = this.names[i] + "=" + this.values[i];
i=1;
for(i=1;i<this.names.length;i++) {returnString = returnString + "," + this.names[i] + "=" + this.values[i];}return returnString;};this.functionString = function() {returnString = '\'';
var f=0; returnString = '\'' + this.names[f] + "=" + this.values[f];
f=1;
for(f=1;f<this.names.length;f++) {returnString = returnString + "','" + this.names[f] + "=" + this.values[f];}returnString = returnString + '\''; return returnString;}
this.optionList = function() {returnString = '';
if(this.getSize() < 4) {return null;}var o=0;
for(o=0;o<this.names.length;o++) {if(this.names[o] != 'quantity' && this.names[o] != 'price' && this.names[o] != 'name' && this.names[o] != 'image') {returnString = returnString + this.names[o] + ':' + this.values[o] + ', ';}}
return returnString;};}function createCookie(name,value,days) {if (days) {var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();}else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";}
function readCookie(name) {var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);}return null;}
function eraseCookie(name) {createCookie(name,"",-1);}
var getElementsByClassName = function (className, tag, elm){if (document.getElementsByClassName) {getElementsByClassName = function (className, tag, elm) {elm = elm || document;
var elements = elm.getElementsByClassName(className),
nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
returnElements = [],
current;
for(var i=0, il=elements.length; i<il; i+=1){current = elements[i];
if(!nodeName || nodeName.test(current.nodeName)) {returnElements.push(current);}}
return returnElements;};}else if (document.evaluate) {getElementsByClassName = function (className, tag, elm) {tag = tag || "*";
elm = elm || document;
var classes = className.split(" "),
classesToCheck = "",
xhtmlNamespace = "http://www.w3.org/1999/xhtml",
namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
returnElements = [],
elements,
node;
for(var j=0, jl=classes.length; j<jl; j+=1){classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";}try{elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);}catch (e) {elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);}while ((node = elements.iterateNext())) {returnElements.push(node);}return returnElements;};}else {getElementsByClassName = function (className, tag, elm) {tag = tag || "*";
elm = elm || document;
var classes = className.split(" "),
classesToCheck = [],
elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
current,
returnElements = [],
match;
for(var k=0, kl=classes.length; k<kl; k+=1){classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));}for(var l=0, ll=elements.length; l<ll; l+=1){current = elements[l];
match = false;
for(var m=0, ml=classesToCheck.length; m<ml; m+=1){match = classesToCheck[m].test(current.className);
if (!match) {break;}}
if (match) {returnElements.push(current);}}
return returnElements;};}return getElementsByClassName(className, tag, elm);};
function createCart(){buy.initialize(); return;}buy = new cart("qesign");(function(){var _jQuery = window.jQuery,
_$ = window.$;
var jQuery = window.jQuery = window.$ = function(selector, context) {return new jQuery.fn.init(selector, context);};
var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,
isSimple = /^.[^:#\[\.]*$/,
undefined;jQuery.fn = jQuery.prototype = {init: function(selector, context) {
selector = selector || document;
if (selector.nodeType) {this[0] = selector;
this.length = 1; return this;}
if (typeof selector == "string") {
var match = quickExpr.exec(selector);
if (match && (match[1] || !context)) {if (match[1])
selector = jQuery.clean([ match[1] ], context);
else {var elem = document.getElementById(match[3]);
if (elem){if (elem.id != match[3])
return jQuery().find(selector); return jQuery(elem);}selector = [];}} else
return jQuery(context).find(selector);
} else if (jQuery.isFunction(selector))
return jQuery(document)[ jQuery.fn.ready ? "ready" : "load" ](selector);return this.setArray(jQuery.makeArray(selector));},
jquery: "1.2.6",
size: function() {return this.length;},
length: 0,
get: function(num) {return num == undefined ?
jQuery.makeArray(this) :
this[ num ];},
pushStack: function(elems) {var ret = jQuery(elems);
ret.prevObject = this; return ret;},setArray: function(elems) {this.length = 0;
Array.prototype.push.apply(this, elems);return this;},each: function(callback, args) {return jQuery.each(this, callback, args);},
index: function(elem) {var ret = -1; return jQuery.inArray(
elem && elem.jquery ? elem[0] : elem
, this);},attr: function(name, value, type) {var options = name;
if (name.constructor == String)
if (value === undefined)
return this[0] && jQuery[ type || "attr" ](this[0], name);else {options = {};
options[ name ] = value;}
return this.each(function(i){for (name in options)
jQuery.attr(
type ?
this.style :
this,
name, jQuery.prop(this, options[ name ], type, i, name)
);});},css: function(key, value) {if ((key == 'width' || key == 'height') && parseFloat(value) < 0)
value = undefined; return this.attr(key, value, "curCSS");},text: function(text) {if (typeof text != "object" && text != null)
return this.empty().append((this[0] && this[0].ownerDocument || document).createTextNode(text));var ret = "";jQuery.each(text || this, function(){jQuery.each(this.childNodes, function(){if (this.nodeType != 8)
ret += this.nodeType != 1 ?
this.nodeValue :
jQuery.fn.text([ this ]);});});return ret;},wrapAll: function(html) {if (this[0])
jQuery(html, this[0].ownerDocument)
.clone()
.insertBefore(this[0])
.map(function(){var elem = this;while (elem.firstChild)
elem = elem.firstChild;
return elem;})
.append(this);
return this;},
wrapInner: function(html) {return this.each(function(){jQuery(this).contents().wrapAll(html);});},
wrap: function(html) {return this.each(function(){jQuery(this).wrapAll(html);});},
append: function() {return this.domManip(arguments, true, false, function(elem){if (this.nodeType == 1)
this.appendChild(elem);});},
prepend: function() {return this.domManip(arguments, true, true, function(elem){if (this.nodeType == 1)
this.insertBefore(elem, this.firstChild);});},
before: function() {return this.domManip(arguments, false, false, function(elem){this.parentNode.insertBefore(elem, this);});},
after: function() {return this.domManip(arguments, false, true, function(elem){this.parentNode.insertBefore(elem, this.nextSibling);});},
end: function() {return this.prevObject || jQuery([]);},
find: function(selector) {var elems = jQuery.map(this, function(elem){return jQuery.find(selector, elem);});
return this.pushStack(/[^+>] [^+>]/.test(selector) || selector.indexOf("..") > -1 ?
jQuery.unique(elems) :
elems);},clone: function(events) {// Do the clone
var ret = this.map(function(){if (jQuery.browser.msie && !jQuery.isXMLDoc(this)) {var clone = this.cloneNode(true),
container = document.createElement("div");
container.appendChild(clone); return jQuery.clean([container.innerHTML])[0];} else
return this.cloneNode(true);});var clone = ret.find("*").andSelf().each(function(){if (this[ expando ] != undefined)
this[ expando ] = null;});if (events === true)
this.find("*").andSelf().each(function(i){if (this.nodeType == 3)
return;
var events = jQuery.data(this, "events");for (var type in events)
for (var handler in events[ type ])
jQuery.event.add(clone[ i ], type, events[ type ][ handler ], events[ type ][ handler ].data);});// Return the cloned set
return ret;},filter: function(selector) {return this.pushStack(
jQuery.isFunction(selector) &&
jQuery.grep(this, function(elem, i){return selector.call(elem, i);}) ||jQuery.multiFilter(selector, this));},not: function(selector) {if (selector.constructor == String)
if (isSimple.test(selector))
return this.pushStack(jQuery.multiFilter(selector, this, true));
else
selector = jQuery.multiFilter(selector, this);var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType; return this.filter(function() {return isArrayLike ? jQuery.inArray(this, selector) < 0 : this != selector;});},add: function(selector) {return this.pushStack(jQuery.unique(jQuery.merge(
this.get(),
typeof selector == 'string' ?
jQuery(selector) :
jQuery.makeArray(selector)
)));},is: function(selector) {return !!selector && jQuery.multiFilter(selector, this).length > 0;},
hasClass: function(selector) {return this.is("." + selector);},
val: function(value) {if (value == undefined) {if (this.length) {var elem = this[0];
if (jQuery.nodeName(elem, "select")) {var index = elem.selectedIndex,
values = [],
options = elem.options,
one = elem.type == "select-one";
if (index < 0)
return null;
for (var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++) {var option = options[ i ];
if (option.selected) {// Get the specifc value for the option
value = jQuery.browser.msie && !option.attributes.value.specified ? option.text : option.value;
if (one)
return value;
values.push(value);}}
return values;
} else
return (this[0].value || "").replace(/\r/g, "");
}return undefined;}
if(value.constructor == Number)
value += '';return this.each(function(){if (this.nodeType != 1)
return;if (value.constructor == Array && /radio|checkbox/.test(this.type))
this.checked = (jQuery.inArray(this.value, value) >= 0 ||
jQuery.inArray(this.name, value) >= 0);else if (jQuery.nodeName(this, "select")) {var values = jQuery.makeArray(value);jQuery("option", this).each(function(){this.selected = (jQuery.inArray(this.value, values) >= 0 ||
jQuery.inArray(this.text, values) >= 0);});if (!values.length)
this.selectedIndex = -1;} else
this.value = value;});},html: function(value) {return value == undefined ?
(this[0] ?
this[0].innerHTML :
null) :
this.empty().append(value);},replaceWith: function(value) {return this.after(value).remove();},
eq: function(i) {return this.slice(i, i + 1);},
slice: function() {return this.pushStack(Array.prototype.slice.apply(this, arguments));},
map: function(callback) {return this.pushStack(jQuery.map(this, function(elem, i){return callback.call(elem, i, elem);}));},
andSelf: function() {return this.add(this.prevObject);},
data: function(key, value){var parts = key.split(".");
parts[1] = parts[1] ? "." + parts[1] : "";
if (value === undefined) {var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
if (data === undefined && this.length)
data = jQuery.data(this[0], key);
return data === undefined && parts[1] ?
this.data(parts[0]) :
data;} else
return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){jQuery.data(this, key, value);});},
removeData: function(key){return this.each(function(){jQuery.removeData(this, key);});},
domManip: function(args, table, reverse, callback) {var clone = this.length > 1, elems;
return this.each(function(){if (!elems) {elems = jQuery.clean(args, this.ownerDocument);
if (reverse)
elems.reverse();}
var obj = this;if (table && jQuery.nodeName(this, "table") && jQuery.nodeName(elems[0], "tr"))
obj = this.getElementsByTagName("tbody")[0] || this.appendChild(this.ownerDocument.createElement("tbody"));var scripts = jQuery([]);jQuery.each(elems, function(){var elem = clone ?
jQuery(this).clone(true)[0] :
this;
if (jQuery.nodeName(elem, "script"))
scripts = scripts.add(elem);
else {if (elem.nodeType == 1)
scripts = scripts.add(jQuery("script", elem).remove());
callback.call(obj, elem);}});
scripts.each(evalScript);});}};
jQuery.fn.init.prototype = jQuery.fn;function evalScript(i, elem) {if (elem.src)
jQuery.ajax({url: elem.src,
async: false,
dataType: "script"
});else
jQuery.globalEval(elem.text || elem.textContent || elem.innerHTML || "");if (elem.parentNode)
elem.parentNode.removeChild(elem);}
function now(){return +new Date;}
jQuery.extend = jQuery.fn.extend = function() {// copy reference to target object
var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;if (target.constructor == Boolean) {deep = target;
target = arguments[1] || {};
i = 2;}
if (typeof target != "object" && typeof target != "function")
target = {};
if (length == i) {target = this;
--i;}
for (; i < length; i++)
if ((options = arguments[ i ]) != null)
for (var name in options) {var src = target[ name ], copy = options[ name ];// Prevent never-ending loop
if (target === copy)
continue;
if (deep && copy && typeof copy == "object" && !copy.nodeType)
target[ name ] = jQuery.extend(deep, 
src || (copy.length != null ? [ ] : { })
, copy);
else if (copy !== undefined)
target[ name ] = copy;}
return target;};var expando = "jQuery" + now(), uuid = 0, windowData = {},
exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
defaultView = document.defaultView || {};jQuery.extend({noConflict: function(deep) {window.$ = _$;if (deep)
window.jQuery = _jQuery;return jQuery;},
isFunction: function(fn) {return !!fn && typeof fn != "string" && !fn.nodeName &&
fn.constructor != Array && /^[\s[]?function/.test(fn + "");},
isXMLDoc: function(elem) {return elem.documentElement && !elem.body ||
elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;},
globalEval: function(data) {data = jQuery.trim(data);if (data) {var head = document.getElementsByTagName("head")[0] || document.documentElement,
script = document.createElement("script");script.type = "text/javascript";
if (jQuery.browser.msie)
script.text = data;
else
script.appendChild(document.createTextNode(data));
head.insertBefore(script, head.firstChild);
head.removeChild(script);}},
nodeName: function(elem, name) {return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();},
cache: {},
data: function(elem, name, data) {elem = elem == window ?
windowData :
elem;var id = elem[ expando ];
if (!id)
id = elem[ expando ] = ++uuid;
if (name && !jQuery.cache[ id ])
jQuery.cache[ id ] = {};
if (data !== undefined)
jQuery.cache[ id ][ name ] = data;
return name ?
jQuery.cache[ id ][ name ] :
id;},removeData: function(elem, name) {elem = elem == window ?
windowData :
elem;var id = elem[ expando ];
if (name) {if (jQuery.cache[ id ]) {delete jQuery.cache[ id ][ name ];
name = "";for (name in jQuery.cache[ id ])
break;if (!name)
jQuery.removeData(elem);}
} else {try {delete elem[ expando ];} catch(e){if (elem.removeAttribute)
elem.removeAttribute(expando);}
delete jQuery.cache[ id ];}},// args is for internal usage only
each: function(object, callback, args) {var name, i = 0, length = object.length;if (args) {if (length == undefined) {for (name in object)
if (callback.apply(object[ name ], args) === false)
break;} else
for (; i < length;)
if (callback.apply(object[ i++ ], args) === false)
break;// A special, fast, case for the most common use of each
} else {if (length == undefined) {for (name in object)
if (callback.call(object[ name ], name, object[ name ]) === false)
break;} else
for (var value = object[0];
i < length && callback.call(value, i, value) !== false; value = object[++i]){}}return object;},prop: function(elem, value, type, i, name) {if (jQuery.isFunction(value))
value = value.call(elem, i);
return value && value.constructor == Number && type == "curCSS" && !exclude.test(name) ?
value + "px" :
value;},className: {add: function(elem, classNames) {jQuery.each((classNames || "").split(/\s+/), function(i, className){if (elem.nodeType == 1 && !jQuery.className.has(elem.className, className))
elem.className += (elem.className ? " " : "") + className;});},
remove: function(elem, classNames) {if (elem.nodeType == 1)
elem.className = classNames != undefined ?
jQuery.grep(elem.className.split(/\s+/), function(className){return !jQuery.className.has(classNames, className);}).join(" ") :
"";},
has: function(elem, className) {return jQuery.inArray(className, (elem.className || elem).toString().split(/\s+/)) > -1;}},swap: function(elem, options, callback) {var old = {};
for (var name in options) {old[ name ] = elem.style[ name ];
elem.style[ name ] = options[ name ];}
callback.call(elem);
for (var name in options)
elem.style[ name ] = old[ name ];},css: function(elem, name, force) {if (name == "width" || name == "height") {var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];function getWH() {val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
var padding = 0, border = 0;
jQuery.each(which, function() {padding += parseFloat(jQuery.curCSS(elem, "padding" + this, true)) || 0;
border += parseFloat(jQuery.curCSS(elem, "border" + this + "Width", true)) || 0;});
val -= Math.round(padding + border);}
if (jQuery(elem).is(":visible"))
getWH();
else
jQuery.swap(elem, props, getWH);return Math.max(0, val);}
return jQuery.curCSS(elem, name, force);},curCSS: function(elem, name, force) {var ret, style = elem.style;
function color(elem) {if (!jQuery.browser.safari)
return false;
var ret = defaultView.getComputedStyle(elem, null); return !ret || ret.getPropertyValue("color") == "";}
if (name == "opacity" && jQuery.browser.msie) {ret = jQuery.attr(style, "opacity");return ret == "" ?
"1" :
ret;}
if (jQuery.browser.opera && name == "display") {var save = style.outline;
style.outline = "0 solid black";
style.outline = save;}
if (name.match(/float/i))
name = styleFloat;if (!force && style && style[ name ])
ret = style[ name ];else if (defaultView.getComputedStyle) {if (name.match(/float/i))
name = "float";name = name.replace(/([A-Z])/g, "-$1").toLowerCase();
var computedStyle = defaultView.getComputedStyle(elem, null);
if (computedStyle && !color(elem))
ret = computedStyle.getPropertyValue(name);
else {var swap = [], stack = [], a = elem, i = 0;
for (; a && color(a); a = a.parentNode)
stack.unshift(a);for (; i < stack.length; i++)
if (color(stack[ i ])) {swap[ i ] = stack[ i ].style.display;
stack[ i ].style.display = "block";}
ret = name == "display" && swap[ stack.length - 1 ] != null ?
"none" :
(computedStyle && computedStyle.getPropertyValue(name)) || "";
for (i = 0; i < swap.length; i++)
if (swap[ i ] != null)
stack[ i ].style.display = swap[ i ];}
if (name == "opacity" && ret == "")
ret = "1";} else if (elem.currentStyle) {var camelCase = name.replace(/\-(\w)/g, function(all, letter){return letter.toUpperCase();});ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];
if (!/^\d+(px)?$/i.test(ret) && /^\d/.test(ret)) {var left = style.left, rsLeft = elem.runtimeStyle.left;
elem.runtimeStyle.left = elem.currentStyle.left;
style.left = ret || 0;
ret = style.pixelLeft + "px";
style.left = left;
elem.runtimeStyle.left = rsLeft;}}return ret;},clean: function(elems, context) {var ret = [];
context = context || document;
if (typeof context.createElement == 'undefined')
context = context.ownerDocument || context[0] && context[0].ownerDocument || document;jQuery.each(elems, function(i, elem){if (!elem)
return;if (elem.constructor == Number)
elem += '';
if (typeof elem == "string") {
elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
all :
front + "></" + tag + ">";});var tags = jQuery.trim(elem).toLowerCase(), div = context.createElement("div");
var wrap =
!tags.indexOf("<opt") &&
[ 1, "<select multiple='multiple'>", "</select>" ] ||!tags.indexOf("<leg") &&
[ 1, "<fieldset>", "</fieldset>" ] ||tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
[ 1, "<table width=100%>", "</table>" ] ||!tags.indexOf("<tr") &&
[ 2, "<table width=100%><tbody>", "</tbody></table>" ] ||
(!tags.indexOf("<td") || !tags.indexOf("<th")) &&
[ 3, "<table width=100%><tbody><tr>", "</tr></tbody></table>" ] ||
!tags.indexOf("<col") &&
[ 2, "<table width=100%><tbody></tbody><colgroup>", "</colgroup></table>" ] ||
jQuery.browser.msie &&
[ 1, "div<div>", "</div>" ] ||[ 0, "", "" ];div.innerHTML = wrap[1] + elem + wrap[2];
while (wrap[0]--)
div = div.lastChild;
if (jQuery.browser.msie) {var tbody = !tags.indexOf("<table") && tags.indexOf("<tbody") < 0 ?
div.firstChild && div.firstChild.childNodes :
wrap[1] == "<table width=100%>" && tags.indexOf("<tbody") < 0 ?
div.childNodes :
[];for (var j = tbody.length - 1; j >= 0 ; --j)
if (jQuery.nodeName(tbody[ j ], "tbody") && !tbody[ j ].childNodes.length)
tbody[ j ].parentNode.removeChild(tbody[ j ]);if (/^\s/.test(elem))
div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]), div.firstChild);}elem = jQuery.makeArray(div.childNodes);}
if (elem.length === 0 && (!jQuery.nodeName(elem, "form") && !jQuery.nodeName(elem, "select")))
return;if (elem[0] == undefined || jQuery.nodeName(elem, "form") || elem.options)
ret.push(elem);else
ret = jQuery.merge(ret, elem);});return ret;},attr: function(elem, name, value) {// don't set attributes on text and comment nodes
if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
return undefined;var notxml = !jQuery.isXMLDoc(elem),
set = value !== undefined,
msie = jQuery.browser.msie;
name = notxml && jQuery.props[ name ] || name;
if (elem.tagName) {var special = /href|src|style/.test(name);
if (name == "selected" && jQuery.browser.safari)
elem.parentNode.selectedIndex;
if (name in elem && notxml && !special) {if (set){// We can't allow the type property to be changed (since it causes problems in IE)
if (name == "type" && jQuery.nodeName(elem, "input") && elem.parentNode)
throw "type property can't be changed";
elem[ name ] = value;}
if(jQuery.nodeName(elem, "form") && elem.getAttributeNode(name))
return elem.getAttributeNode(name).nodeValue;
return elem[ name ];}
if (msie && notxml &&  name == "style")
return jQuery.attr(elem.style, "cssText", value);
if (set)
elem.setAttribute(name, "" + value);
var attr = msie && notxml && special
? elem.getAttribute(name, 2)
: elem.getAttribute(name);
return attr === null ? undefined : attr;}
if (msie && name == "opacity") {if (set) {elem.zoom = 1;
elem.filter = (elem.filter || "").replace(/alpha\([^)]*\)/, "") +
(parseInt(value) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");}
return elem.filter && elem.filter.indexOf("opacity=") >= 0 ?
(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1]) / 100) + '':
"";}
name = name.replace(/-([a-z])/ig, function(all, letter){return letter.toUpperCase();});if (set)
elem[ name ] = value;return elem[ name ];},trim: function(text) {return (text || "").replace(/^\s+|\s+$/g, "");},makeArray: function(array) {var ret = [];if(array != null){var i = array.length;
if(i == null || array.split || array.setInterval || array.call)
ret[0] = array;
else
while(i)
ret[--i] = array[i];}
return ret;},inArray: function(elem, array) {for (var i = 0, length = array.length; i < length; i++)
if (array[ i ] === elem)
return i;return -1;},merge: function(first, second) {var i = 0, elem, pos = first.length;
if (jQuery.browser.msie) {while (elem = second[ i++ ])
if (elem.nodeType != 8)
first[ pos++ ] = elem;} else
while (elem = second[ i++ ])
first[ pos++ ] = elem;return first;},unique: function(array) {var ret = [], done = {};try {for (var i = 0, length = array.length; i < length; i++) {var id = jQuery.data(array[ i ]);if (!done[ id ]) {done[ id ] = true;
ret.push(array[ i ]);}}} catch(e) {ret = array;}
return ret;},grep: function(elems, callback, inv) {var ret = [];
for (var i = 0, length = elems.length; i < length; i++)
if (!inv != !callback(elems[ i ], i))
ret.push(elems[ i ]);return ret;},map: function(elems, callback) {var ret = [];
for (var i = 0, length = elems.length; i < length; i++) {var value = callback(elems[ i ], i);if (value != null)
ret[ ret.length ] = value;}
return ret.concat.apply([], ret);}});var userAgent = navigator.userAgent.toLowerCase();
jQuery.browser = {version: (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1],
safari: /webkit/.test(userAgent),
opera: /opera/.test(userAgent),
msie: /msie/.test(userAgent) && !/opera/.test(userAgent),
mozilla: /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent)
};var styleFloat = jQuery.browser.msie ?
"styleFloat" :
"cssFloat";
jQuery.each({removeAttr: function(name) {jQuery.attr(this, name, "");
if (this.nodeType == 1)
this.removeAttribute(name);},addClass: function(classNames) {jQuery.className.add(this, classNames);},removeClass: function(classNames) {jQuery.className.remove(this, classNames);},toggleClass: function(classNames) {jQuery.className[ jQuery.className.has(this, classNames) ? "remove" : "add" ](this, classNames);},remove: function(selector) {if (!selector || jQuery.filter(selector, [ this ]).r.length) {// Prevent memory leaks
jQuery("*", this).add(this).each(function(){jQuery.event.remove(this);
jQuery.removeData(this);});
if (this.parentNode)
this.parentNode.removeChild(this);}},empty: function() {jQuery(">*", this).remove();while (this.firstChild)
this.removeChild(this.firstChild);}}, function(name, fn){jQuery.fn[ name ] = function(){return this.each(fn, arguments);};});jQuery.each([ "Height", "Width" ], function(i, name){var type = name.toLowerCase();jQuery.fn[ type ] = function(size) {return this[0] == window ?
jQuery.browser.opera && document.body[ "client" + name ] ||
jQuery.browser.safari && window[ "inner" + name ] ||
document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] || document.body[ "client" + name ] :
this[0] == document ?
Math.max(
Math.max(document.body["scroll" + name], document.documentElement["scroll" + name]),
Math.max(document.body["offset" + name], document.documentElement["offset" + name])
) :size == undefined ?
(this.length ? jQuery.css(this[0], type) : null) :
this.css(type, size.constructor == String ? size : size + "px");};});
function num(elem, prop) {return elem[0] && parseInt(jQuery.curCSS(elem[0], prop, true), 10) || 0;}var chars = jQuery.browser.safari && parseInt(jQuery.browser.version) < 417 ?
"(?:[\\w*_-]|\\\\.)" :
"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",
quickChild = new RegExp("^>\\s*(" + chars + "+)"),
quickID = new RegExp("^(" + chars + "+)(#)(" + chars + "+)"),
quickClass = new RegExp("^([#.]?)(" + chars + "*)");jQuery.extend({expr: {"": function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},
"#": function(a,i,m){return a.getAttribute("id")==m[2];},
":": {animated: function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}
},parse: [
/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)(" + chars + "+)")
],multiFilter: function(expr, elems, not) {var old, cur = [];while (expr && expr != old) {old = expr;
var f = jQuery.filter(expr, elems, not);
expr = f.t.replace(/^\s*,\s*/, "");
cur = not ? elems = f.r : jQuery.merge(cur, f.r);}
return cur;},find: function(t, context) {if (typeof t != "string")
return [ t ];
if (context && context.nodeType != 1 && context.nodeType != 9)
return [ ];
context = context || document;
var ret = [context], done = [], last, nodeName;
while (t && last != t) {var r = [];
last = t;
t = jQuery.trim(t);
var foundToken = false,
re = quickChild,
m = re.exec(t);
if (m) {nodeName = m[1].toUpperCase();
for (var i = 0; ret[i]; i++)
for (var c = ret[i].firstChild; c; c = c.nextSibling)
if (c.nodeType == 1 && (nodeName == "*" || c.nodeName.toUpperCase() == nodeName))
r.push(c);ret = r;
t = t.replace(re, "");
if (t.indexOf(" ") == 0) continue;
foundToken = true;} else {re = /^([>+~])\s*(\w*)/i;if ((m = re.exec(t)) != null) {r = [];var merge = {};
nodeName = m[2].toUpperCase();
m = m[1];for (var j = 0, rl = ret.length; j < rl; j++) {var n = m == "~" || m == "+" ? ret[j].nextSibling : ret[j].firstChild;
for (; n; n = n.nextSibling)
if (n.nodeType == 1) {var id = jQuery.data(n);if (m == "~" && merge[id]) break;if (!nodeName || n.nodeName.toUpperCase() == nodeName) {if (m == "~") merge[id] = true;
r.push(n);}
if (m == "+") break;}}ret = r;
t = jQuery.trim(t.replace(re, ""));
foundToken = true;}}if (t && !foundToken) {if (!t.indexOf(",")) {if (context == ret[0]) ret.shift();
done = jQuery.merge(done, ret);
r = ret = [context];
t = " " + t.substr(1,t.length);} else {var re2 = quickID;
var m = re2.exec(t);if (m) {m = [ 0, m[2], m[3], m[1] ];} else {re2 = quickClass;
m = re2.exec(t);}
m[2] = m[2].replace(/\\/g, "");var elem = ret[ret.length-1];// Try to do a global search by ID, where we can
if (m[1] == "#" && elem && elem.getElementById && !jQuery.isXMLDoc(elem)) {// Optimization for HTML document case
var oid = elem.getElementById(m[2]);
if ((jQuery.browser.msie||jQuery.browser.opera) && oid && typeof oid.id == "string" && oid.id != m[2])
oid = jQuery('[@id="'+m[2]+'"]', elem)[0];
ret = r = oid && (!m[3] || jQuery.nodeName(oid, m[3])) ? [oid] : [];} else {
for (var i = 0; ret[i]; i++) {
var tag = m[1] == "#" && m[3] ? m[3] : m[1] != "" || m[0] == "" ? "*" : m[2];if (tag == "*" && ret[i].nodeName.toLowerCase() == "object")
tag = "param";r = jQuery.merge(r, ret[i].getElementsByTagName(tag));}
if (m[1] == ".")
r = jQuery.classFilter(r, m[2]);
if (m[1] == "#") {var tmp = [];for (var i = 0; r[i]; i++)
if (r[i].getAttribute("id") == m[2]) {tmp = [ r[i] ];
break;}
r = tmp;}
ret = r;}
t = t.replace(re2, "");}}
if (t) {var val = jQuery.filter(t,r);
ret = r = val.r;
t = jQuery.trim(val.t);}}if (t)
ret = [];
if (ret && context == ret[0])
ret.shift();
done = jQuery.merge(done, ret);return done;},classFilter: function(r,m,not){m = " " + m + " ";
var tmp = [];
for (var i = 0; r[i]; i++) {var pass = (" " + r[i].className + " ").indexOf(m) >= 0;
if (!not && pass || not && !pass)
tmp.push(r[i]);}return tmp;},filter: function(t,r,not) {var last;
while (t && t != last) {last = t;
var p = jQuery.parse, m;
for (var i = 0; p[i]; i++) {m = p[i].exec(t);
if (m) {t = t.substring(m[0].length);
m[2] = m[2].replace(/\\/g, "");
break;}}
if (!m)
break;
if (m[1] == ":" && m[2] == "not")
r = isSimple.test(m[3]) ?
jQuery.filter(m[3], r, true).r :
jQuery(r).not(m[3]);
else if (m[1] == ".")
r = jQuery.classFilter(r, m[2], not);else if (m[1] == "[") {var tmp = [], type = m[3];for (var i = 0, rl = r.length; i < rl; i++) {var a = r[i], z = a[ jQuery.props[m[2]] || m[2] ];if (z == null || /href|src|selected/.test(m[2]))
z = jQuery.attr(a,m[2]) || '';if ((type == "" && !!z ||
 type == "=" && z == m[5] ||
 type == "!=" && z != m[5] ||
 type == "^=" && z && !z.indexOf(m[5]) ||
 type == "$=" && z.substr(z.length - m[5].length) == m[5] ||
 (type == "*=" || type == "~=") && z.indexOf(m[5]) >= 0) ^ not)
tmp.push(a);}
r = tmp;
} else if (m[1] == ":" && m[2] == "nth-child") {var merge = {}, tmp = [],
test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
m[3] == "even" && "2n" || m[3] == "odd" && "2n+1" ||
!/\D/.test(m[3]) && "0n+" + m[3] || m[3]),
first = (test[1] + (test[2] || 1)) - 0, last = test[3] - 0;
for (var i = 0, rl = r.length; i < rl; i++) {var node = r[i], parentNode = node.parentNode, id = jQuery.data(parentNode);
if (!merge[id]) {var c = 1;for (var n = parentNode.firstChild; n; n = n.nextSibling)
if (n.nodeType == 1)
n.nodeIndex = c++;
merge[id] = true;}
var add = false;if (first == 0) {if (node.nodeIndex == last)
add = true;} else if ((node.nodeIndex - last) % first == 0 && (node.nodeIndex - last) / first >= 0)
add = true;if (add ^ not)
tmp.push(node);}
r = tmp;
} else {var fn = jQuery.expr[ m[1] ];
if (typeof fn == "object")
fn = fn[ m[2] ];if (typeof fn == "string")
fn = eval("false||function(a,i){return " + fn + ";}");
r = jQuery.grep(r, function(elem, i){return fn(elem, i, m, r);}, not);}}
return { r: r, t: t };},
dir: function(elem, dir){var matched = [],
cur = elem[dir];
while (cur && cur != document) {if (cur.nodeType == 1)
matched.push(cur);
cur = cur[dir];}return matched;},
nth: function(cur,result,dir,elem){result = result || 1;
var num = 0;
for (; cur; cur = cur[dir])
if (cur.nodeType == 1 && ++num == result)
break;
return cur;},
sibling: function(n, elem) {var r = [];
for (; n; n = n.nextSibling) {if (n.nodeType == 1 && n != elem)
r.push(n);}
return r;}});
jQuery.event = {add: function(elem, types, handler, data) {if (elem.nodeType == 3 || elem.nodeType == 8)
return;
if (jQuery.browser.msie && elem.setInterval)
elem = window;
if (!handler.guid)
handler.guid = this.guid++;
if(data != undefined) {var fn = handler;
handler = this.proxy(fn, function() {return fn.apply(this, arguments);});
handler.data = data;}
var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),
handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){if (typeof jQuery != "undefined" && !jQuery.event.triggered)
return jQuery.event.handle.apply(arguments.callee.elem, arguments);});
handle.elem = elem;jQuery.each(types.split(/\s+/), function(index, type) {var parts = type.split(".");
type = parts[0];
handler.type = parts[1];
var handlers = events[type];
if (!handlers) {handlers = events[type] = {};if (!jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem) === false) {if (elem.addEventListener)
elem.addEventListener(type, handle, false);
else if (elem.attachEvent)
elem.attachEvent("on" + type, handle);}}
handlers[handler.guid] = handler;
jQuery.event.global[type] = true;});
elem = null;},guid: 1,
global: {},remove: function(elem, types, handler) {if (elem.nodeType == 3 || elem.nodeType == 8)
return;var events = jQuery.data(elem, "events"), ret, index;if (events) {// Unbind all events for the element
if (types == undefined || (typeof types == "string" && types.charAt(0) == "."))
for (var type in events)
this.remove(elem, type + (types || ""));
else {// types is actually an event object here
if (types.type) {handler = types.handler;
types = types.type;}
jQuery.each(types.split(/\s+/), function(index, type){
var parts = type.split(".");
type = parts[0];if (events[type]) {if (handler)
delete events[type][handler.guid];
else
for (handler in events[type])
if (!parts[1] || events[type][handler].type == parts[1])
delete events[type][handler];
for (ret in events[type]) break;
if (!ret) {if (!jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem) === false) {if (elem.removeEventListener)
elem.removeEventListener(type, jQuery.data(elem, "handle"), false);
else if (elem.detachEvent)
elem.detachEvent("on" + type, jQuery.data(elem, "handle"));}ret = null;
delete events[type];}}});}
for (ret in events) break;
if (!ret) {var handle = jQuery.data(elem, "handle");
if (handle) handle.elem = null;
jQuery.removeData(elem, "events");
jQuery.removeData(elem, "handle");}}},trigger: function(type, data, elem, donative, extra) {
data = jQuery.makeArray(data);if (type.indexOf("!") >= 0) {type = type.slice(0, -1);
var exclusive = true;}
if (!elem) {if (this.global[type])
jQuery("*").add([window, document]).trigger(type, data);
} else {if (elem.nodeType == 3 || elem.nodeType == 8)
return undefined;var val, ret, fn = jQuery.isFunction(elem[ type ] || null),
event = !data[0] || !data[0].preventDefault;
if (event) {data.unshift({type: type,
target: elem,
preventDefault: function(){},
stopPropagation: function(){},
timeStamp: now()
});
data[0][expando] = true;}data[0].type = type;
if (exclusive)
data[0].exclusive = true;
var handle = jQuery.data(elem, "handle");
if (handle)
val = handle.apply(elem, data);
if ((!fn || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply(elem, data) === false)
val = false;if (event)
data.shift();if (extra && jQuery.isFunction(extra)) {ret = extra.apply(elem, val == null ? data : data.concat(val));
if (ret !== undefined)
val = ret;}
if (fn && donative !== false && val !== false && !(jQuery.nodeName(elem, 'a') && type == "click")) {this.triggered = true;
try {elem[ type ]();
} catch (e) {}}this.triggered = false;}
return val;},handle: function(event) {var val, ret, namespace, all, handlers;event = arguments[0] = jQuery.event.fix(event || window.event);
namespace = event.type.split(".");event.type = namespace[0];namespace = namespace[1];all = !namespace && !event.exclusive;
handlers = (jQuery.data(this, "events") || {})[event.type];
for (var j in handlers) {var handler = handlers[j];
if (all || handler.type == namespace) {event.handler = handler;event.data = handler.data;
ret = handler.apply(this, arguments);if (val !== false)
val = ret;
if (ret === false) {event.preventDefault();
event.stopPropagation();}}}
return val;},
fix: function(event) {if (event[expando] == true)
return event;var originalEvent = event;
event = { originalEvent: originalEvent };
var props = "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");
for (var i=props.length; i; i--)
event[ props[i] ] = originalEvent[ props[i] ];event[expando] = true;
event.preventDefault = function() {if (originalEvent.preventDefault)
originalEvent.preventDefault();
originalEvent.returnValue = false;};
event.stopPropagation = function() {if (originalEvent.stopPropagation)
originalEvent.stopPropagation();
originalEvent.cancelBubble = true;};
event.timeStamp = event.timeStamp || now();
if (!event.target)
event.target = event.srcElement || document;
if (event.target.nodeType == 3)
event.target = event.target.parentNode;
if (!event.relatedTarget && event.fromElement)
event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;
if (event.pageX == null && event.clientX != null) {var doc = document.documentElement, body = document.body;
event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);}
if (!event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode))
event.which = event.charCode || event.keyCode;
if (!event.metaKey && event.ctrlKey)
event.metaKey = event.ctrlKey;
if (!event.which && event.button)
event.which = (event.button & 1 ? 1 : (event.button & 2 ? 3 : (event.button & 4 ? 2 : 0)));return event;},
proxy: function(fn, proxy){proxy.guid = fn.guid = fn.guid || proxy.guid || this.guid++;
return proxy;},
special: {ready: {setup: function() {bindReady(); return;},
teardown: function() { return; }},
mouseenter: {setup: function() {if (jQuery.browser.msie) return false;
jQuery(this).bind("mouseover", jQuery.event.special.mouseenter.handler); return true;},
teardown: function() {if (jQuery.browser.msie) return false;
jQuery(this).unbind("mouseover", jQuery.event.special.mouseenter.handler); return true;},
handler: function(event) {if (withinElement(event, this)) return true;
event.type = "mouseenter"; return jQuery.event.handle.apply(this, arguments);}},
mouseleave: {setup: function() {if (jQuery.browser.msie) return false;
jQuery(this).bind("mouseout", jQuery.event.special.mouseleave.handler); return true;},
teardown: function() {if (jQuery.browser.msie) return false;
jQuery(this).unbind("mouseout", jQuery.event.special.mouseleave.handler); return true;},
handler: function(event) {if (withinElement(event, this)) return true;
event.type = "mouseleave"; return jQuery.event.handle.apply(this, arguments);}}}};jQuery.fn.extend({bind: function(type, data, fn) {return type == "unload" ? this.one(type, data, fn) : this.each(function(){jQuery.event.add(this, type, fn || data, fn && data);});},
one: function(type, data, fn) {var one = jQuery.event.proxy(fn || data, function(event) {jQuery(this).unbind(event, one); return (fn || data).apply(this, arguments);}); return this.each(function(){jQuery.event.add(this, type, one, fn && data);});},
unbind: function(type, fn) {return this.each(function(){jQuery.event.remove(this, type, fn);});},
trigger: function(type, data, fn) {return this.each(function(){jQuery.event.trigger(type, data, this, true, fn);});},
triggerHandler: function(type, data, fn) {return this[0] && jQuery.event.trigger(type, data, this[0], false, fn);},
toggle: function(fn) {var args = arguments, i = 1;
while(i < args.length)
jQuery.event.proxy(fn, args[i++]);
return this.click(jQuery.event.proxy(fn, function(event) {this.lastToggle = (this.lastToggle || 0) % i;
event.preventDefault(); return args[ this.lastToggle++ ].apply(this, arguments) || false;}));},
hover: function(fnOver, fnOut) {return this.bind('mouseenter', fnOver).bind('mouseleave', fnOut);},
ready: function(fn) {bindReady();
if (jQuery.isReady)
fn.call(document, jQuery);
else
jQuery.readyList.push(function() { return fn.call(this, jQuery); });return this;}});jQuery.extend({isReady: false,
readyList: [],
ready: function() {if (!jQuery.isReady) {jQuery.isReady = true;
if (jQuery.readyList) {jQuery.each(jQuery.readyList, function(){this.call(document);});
jQuery.readyList = null;}
jQuery(document).triggerHandler("ready");}}});
var readyBound = false;function bindReady(){if (readyBound) return;readyBound = true;
if (document.addEventListener && !jQuery.browser.opera)
document.addEventListener("DOMContentLoaded", jQuery.ready, false);
if (jQuery.browser.msie && window == top) (function(){if (jQuery.isReady) return;
try {document.documentElement.doScroll("left");} catch(error) {setTimeout(arguments.callee, 0); return;}jQuery.ready();})();
if (jQuery.browser.opera)
document.addEventListener("DOMContentLoaded", function () {if (jQuery.isReady) return;
for (var i = 0; i < document.styleSheets.length; i++)
if (document.styleSheets[i].disabled) {setTimeout(arguments.callee, 0); return;}
jQuery.ready();}, false);
if (jQuery.browser.safari) {var numStyles;
(function(){if (jQuery.isReady) return;
if (document.readyState != "loaded" && document.readyState != "complete") {setTimeout(arguments.callee, 0); return;}if (numStyles === undefined)
numStyles = jQuery("style, link[rel=stylesheet]").length;
if (document.styleSheets.length != numStyles) {setTimeout(arguments.callee, 0); return;}
jQuery.ready();})();}jQuery.event.add(window, "load", jQuery.ready);}
})();$(document).ready(createCart);