/* ========================================= */

/*
 * jQuery JavaScript Library v1.3.2
 * http://jquery.com/
 *
 * Copyright (c) 2009 John Resig
 * Dual licensed under the MIT and GPL licenses.
 * http://docs.jquery.com/License
 *
 * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
 * Revision: 6246
 */
(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
/*
 * Sizzle CSS Selector Engine - v0.9.3
 *  Copyright 2009, The Dojo Foundation
 *  Released under the MIT, BSD, and GPL Licenses.
 *  More information: http://sizzlejs.com/
 */
(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML='   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();



/* JQUERY COOKIE */

/**
 * Cookie plugin
 *
 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 */

/**
 * Create a cookie with the given name and value and other optional parameters.
 *
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Set the value of a cookie.
 * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
 * @desc Create a cookie with all available options.
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Create a session cookie.
 * @example $.cookie('the_cookie', null);
 * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
 *       used when the cookie was set.
 *
 * @param String name The name of the cookie.
 * @param String value The value of the cookie.
 * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
 * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
 *                             If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
 *                             If set to null or omitted, the cookie will be a session cookie and will not be retained
 *                             when the the browser exits.
 * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
 * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
 * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
 *                        require a secure protocol (like HTTPS).
 * @type undefined
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */

/**
 * Get the value of a cookie with the given name.
 *
 * @example $.cookie('the_cookie');
 * @desc Get the value of a cookie.
 *
 * @param String name The name of the cookie.
 * @return The value of the cookie.
 * @type String
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */
jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        // CAUTION: Needed to parenthesize options.path and options.domain
        // in the following expressions, otherwise they evaluate to undefined
        // in the packed version for some reason...
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};

/* JQUERY JSON */

/*
 * jQuery JSON Plugin
 * version: 2.1 (2009-08-14)
 *
 * This document is licensed as free software under the terms of the
 * MIT License: http://www.opensource.org/licenses/mit-license.php
 *
 * Brantley Harris wrote this plugin. It is based somewhat on the JSON.org 
 * website's http://www.json.org/json2.js, which proclaims:
 * "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that
 * I uphold.
 *
 * It is also influenced heavily by MochiKit's serializeJSON, which is 
 * copyrighted 2005 by Bob Ippolito.
 */
 
(function($) {
    /** jQuery.toJSON( json-serializble )
        Converts the given argument into a JSON respresentation.

        If an object has a "toJSON" function, that will be used to get the representation.
        Non-integer/string keys are skipped in the object, as are keys that point to a function.

        json-serializble:
            The *thing* to be converted.
     **/
    $.toJSON = function(o)
    {
        if (typeof(JSON) == 'object' && JSON.stringify)
            return JSON.stringify(o);
        
        var type = typeof(o);
    
        if (o === null)
            return "null";
    
        if (type == "undefined")
            return undefined;
        
        if (type == "number" || type == "boolean")
            return o + "";
    
        if (type == "string")
            return $.quoteString(o);
    
        if (type == 'object')
        {
            if (typeof o.toJSON == "function") 
                return $.toJSON( o.toJSON() );
            
            if (o.constructor === Date)
            {
                var month = o.getUTCMonth() + 1;
                if (month < 10) month = '0' + month;

                var day = o.getUTCDate();
                if (day < 10) day = '0' + day;

                var year = o.getUTCFullYear();
                
                var hours = o.getUTCHours();
                if (hours < 10) hours = '0' + hours;
                
                var minutes = o.getUTCMinutes();
                if (minutes < 10) minutes = '0' + minutes;
                
                var seconds = o.getUTCSeconds();
                if (seconds < 10) seconds = '0' + seconds;
                
                var milli = o.getUTCMilliseconds();
                if (milli < 100) milli = '0' + milli;
                if (milli < 10) milli = '0' + milli;

                return '"' + year + '-' + month + '-' + day + 'T' +
                             hours + ':' + minutes + ':' + seconds + 
                             '.' + milli + 'Z"'; 
            }

            if (o.constructor === Array) 
            {
                var ret = [];
                for (var i = 0; i < o.length; i++)
                    ret.push( $.toJSON(o[i]) || "null" );

                return "[" + ret.join(",") + "]";
            }
        
            var pairs = [];
            for (var k in o) {
                var name;
                var type = typeof k;

                if (type == "number")
                    name = '"' + k + '"';
                else if (type == "string")
                    name = $.quoteString(k);
                else
                    continue;  //skip non-string or number keys
            
                if (typeof o[k] == "function") 
                    continue;  //skip pairs where the value is a function.
            
                var val = $.toJSON(o[k]);
            
                pairs.push(name + ":" + val);
            }

            return "{" + pairs.join(", ") + "}";
        }
    };

    /** jQuery.evalJSON(src)
        Evaluates a given piece of json source.
     **/
    $.evalJSON = function(src)
    {
        if (typeof(JSON) == 'object' && JSON.parse)
            return JSON.parse(src);
        return eval("(" + src + ")");
    };
    
    /** jQuery.secureEvalJSON(src)
        Evals JSON in a way that is *more* secure.
    **/
    $.secureEvalJSON = function(src)
    {
        if (typeof(JSON) == 'object' && JSON.parse)
            return JSON.parse(src);
        
        var filtered = src;
        filtered = filtered.replace(/\\["\\\/bfnrtu]/g, '@');
        filtered = filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']');
        filtered = filtered.replace(/(?:^|:|,)(?:\s*\[)+/g, '');
        
        if (/^[\],:{}\s]*$/.test(filtered))
            return eval("(" + src + ")");
        else
            throw new SyntaxError("Error parsing JSON, source is not valid.");
    };

    /** jQuery.quoteString(string)
        Returns a string-repr of a string, escaping quotes intelligently.  
        Mostly a support function for toJSON.
    
        Examples:
            >>> jQuery.quoteString("apple")
            "apple"
        
            >>> jQuery.quoteString('"Where are we going?", she asked.')
            "\"Where are we going?\", she asked."
     **/
    $.quoteString = function(string)
    {
        if (string.match(_escapeable))
        {
            return '"' + string.replace(_escapeable, function (a) 
            {
                var c = _meta[a];
                if (typeof c === 'string') return c;
                c = a.charCodeAt();
                return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
            }) + '"';
        }
        return '"' + string + '"';
    };
    
    var _escapeable = /["\\\x00-\x1f\x7f-\x9f]/g;
    
    var _meta = {
        '\b': '\\b',
        '\t': '\\t',
        '\n': '\\n',
        '\f': '\\f',
        '\r': '\\r',
        '"' : '\\"',
        '\\': '\\\\'
    };
})(jQuery);


/* JQUERY UI CORE */

/*
 * jQuery UI 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI
 */
;jQuery.ui || (function($) {

var _remove = $.fn.remove,
	isFF2 = $.browser.mozilla && (parseFloat($.browser.version) < 1.9);

//Helper functions and ui object
$.ui = {
	version: "1.7.2",

	// $.ui.plugin is deprecated.  Use the proxy pattern instead.
	plugin: {
		add: function(module, option, set) {
			var proto = $.ui[module].prototype;
			for(var i in set) {
				proto.plugins[i] = proto.plugins[i] || [];
				proto.plugins[i].push([option, set[i]]);
			}
		},
		call: function(instance, name, args) {
			var set = instance.plugins[name];
			if(!set || !instance.element[0].parentNode) { return; }

			for (var i = 0; i < set.length; i++) {
				if (instance.options[set[i][0]]) {
					set[i][1].apply(instance.element, args);
				}
			}
		}
	},

	contains: function(a, b) {
		return document.compareDocumentPosition
			? a.compareDocumentPosition(b) & 16
			: a !== b && a.contains(b);
	},

	hasScroll: function(el, a) {

		//If overflow is hidden, the element might have extra content, but the user wants to hide it
		if ($(el).css('overflow') == 'hidden') { return false; }

		var scroll = (a && a == 'left') ? 'scrollLeft' : 'scrollTop',
			has = false;

		if (el[scroll] > 0) { return true; }

		// TODO: determine which cases actually cause this to happen
		// if the element doesn't have the scroll set, see if it's possible to
		// set the scroll
		el[scroll] = 1;
		has = (el[scroll] > 0);
		el[scroll] = 0;
		return has;
	},

	isOverAxis: function(x, reference, size) {
		//Determines when x coordinate is over "b" element axis
		return (x > reference) && (x < (reference + size));
	},

	isOver: function(y, x, top, left, height, width) {
		//Determines when x, y coordinates is over "b" element
		return $.ui.isOverAxis(y, top, height) && $.ui.isOverAxis(x, left, width);
	},

	keyCode: {
		BACKSPACE: 8,
		CAPS_LOCK: 20,
		COMMA: 188,
		CONTROL: 17,
		DELETE: 46,
		DOWN: 40,
		END: 35,
		ENTER: 13,
		ESCAPE: 27,
		HOME: 36,
		INSERT: 45,
		LEFT: 37,
		NUMPAD_ADD: 107,
		NUMPAD_DECIMAL: 110,
		NUMPAD_DIVIDE: 111,
		NUMPAD_ENTER: 108,
		NUMPAD_MULTIPLY: 106,
		NUMPAD_SUBTRACT: 109,
		PAGE_DOWN: 34,
		PAGE_UP: 33,
		PERIOD: 190,
		RIGHT: 39,
		SHIFT: 16,
		SPACE: 32,
		TAB: 9,
		UP: 38
	}
};

// WAI-ARIA normalization
if (isFF2) {
	var attr = $.attr,
		removeAttr = $.fn.removeAttr,
		ariaNS = "http://www.w3.org/2005/07/aaa",
		ariaState = /^aria-/,
		ariaRole = /^wairole:/;

	$.attr = function(elem, name, value) {
		var set = value !== undefined;

		return (name == 'role'
			? (set
				? attr.call(this, elem, name, "wairole:" + value)
				: (attr.apply(this, arguments) || "").replace(ariaRole, ""))
			: (ariaState.test(name)
				? (set
					? elem.setAttributeNS(ariaNS,
						name.replace(ariaState, "aaa:"), value)
					: attr.call(this, elem, name.replace(ariaState, "aaa:")))
				: attr.apply(this, arguments)));
	};

	$.fn.removeAttr = function(name) {
		return (ariaState.test(name)
			? this.each(function() {
				this.removeAttributeNS(ariaNS, name.replace(ariaState, ""));
			}) : removeAttr.call(this, name));
	};
}

//jQuery plugins
$.fn.extend({
	remove: function() {
		// Safari has a native remove event which actually removes DOM elements,
		// so we have to use triggerHandler instead of trigger (#3037).
		$("*", this).add(this).each(function() {
			$(this).triggerHandler("remove");
		});
		return _remove.apply(this, arguments );
	},

	enableSelection: function() {
		return this
			.attr('unselectable', 'off')
			.css('MozUserSelect', '')
			.unbind('selectstart.ui');
	},

	disableSelection: function() {
		return this
			.attr('unselectable', 'on')
			.css('MozUserSelect', 'none')
			.bind('selectstart.ui', function() { return false; });
	},

	scrollParent: function() {
		var scrollParent;
		if(($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
			scrollParent = this.parents().filter(function() {
				return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
			}).eq(0);
		} else {
			scrollParent = this.parents().filter(function() {
				return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
			}).eq(0);
		}

		return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;
	}
});


//Additional selectors
$.extend($.expr[':'], {
	data: function(elem, i, match) {
		return !!$.data(elem, match[3]);
	},

	focusable: function(element) {
		var nodeName = element.nodeName.toLowerCase(),
			tabIndex = $.attr(element, 'tabindex');
		return (/input|select|textarea|button|object/.test(nodeName)
			? !element.disabled
			: 'a' == nodeName || 'area' == nodeName
				? element.href || !isNaN(tabIndex)
				: !isNaN(tabIndex))
			// the element and all of its ancestors must be visible
			// the browser may report that the area is hidden
			&& !$(element)['area' == nodeName ? 'parents' : 'closest'](':hidden').length;
	},

	tabbable: function(element) {
		var tabIndex = $.attr(element, 'tabindex');
		return (isNaN(tabIndex) || tabIndex >= 0) && $(element).is(':focusable');
	}
});


// $.widget is a factory to create jQuery plugins
// taking some boilerplate code out of the plugin code
function getter(namespace, plugin, method, args) {
	function getMethods(type) {
		var methods = $[namespace][plugin][type] || [];
		return (typeof methods == 'string' ? methods.split(/,?\s+/) : methods);
	}

	var methods = getMethods('getter');
	if (args.length == 1 && typeof args[0] == 'string') {
		methods = methods.concat(getMethods('getterSetter'));
	}
	return ($.inArray(method, methods) != -1);
}

$.widget = function(name, prototype) {
	var namespace = name.split(".")[0];
	name = name.split(".")[1];

	// create plugin method
	$.fn[name] = function(options) {
		var isMethodCall = (typeof options == 'string'),
			args = Array.prototype.slice.call(arguments, 1);

		// prevent calls to internal methods
		if (isMethodCall && options.substring(0, 1) == '_') {
			return this;
		}

		// handle getter methods
		if (isMethodCall && getter(namespace, name, options, args)) {
			var instance = $.data(this[0], name);
			return (instance ? instance[options].apply(instance, args)
				: undefined);
		}

		// handle initialization and non-getter methods
		return this.each(function() {
			var instance = $.data(this, name);

			// constructor
			(!instance && !isMethodCall &&
				$.data(this, name, new $[namespace][name](this, options))._init());

			// method call
			(instance && isMethodCall && $.isFunction(instance[options]) &&
				instance[options].apply(instance, args));
		});
	};

	// create widget constructor
	$[namespace] = $[namespace] || {};
	$[namespace][name] = function(element, options) {
		var self = this;

		this.namespace = namespace;
		this.widgetName = name;
		this.widgetEventPrefix = $[namespace][name].eventPrefix || name;
		this.widgetBaseClass = namespace + '-' + name;

		this.options = $.extend({},
			$.widget.defaults,
			$[namespace][name].defaults,
			$.metadata && $.metadata.get(element)[name],
			options);

		this.element = $(element)
			.bind('setData.' + name, function(event, key, value) {
				if (event.target == element) {
					return self._setData(key, value);
				}
			})
			.bind('getData.' + name, function(event, key) {
				if (event.target == element) {
					return self._getData(key);
				}
			})
			.bind('remove', function() {
				return self.destroy();
			});
	};

	// add widget prototype
	$[namespace][name].prototype = $.extend({}, $.widget.prototype, prototype);

	// TODO: merge getter and getterSetter properties from widget prototype
	// and plugin prototype
	$[namespace][name].getterSetter = 'option';
};

$.widget.prototype = {
	_init: function() {},
	destroy: function() {
		this.element.removeData(this.widgetName)
			.removeClass(this.widgetBaseClass + '-disabled' + ' ' + this.namespace + '-state-disabled')
			.removeAttr('aria-disabled');
	},

	option: function(key, value) {
		var options = key,
			self = this;

		if (typeof key == "string") {
			if (value === undefined) {
				return this._getData(key);
			}
			options = {};
			options[key] = value;
		}

		$.each(options, function(key, value) {
			self._setData(key, value);
		});
	},
	_getData: function(key) {
		return this.options[key];
	},
	_setData: function(key, value) {
		this.options[key] = value;

		if (key == 'disabled') {
			this.element
				[value ? 'addClass' : 'removeClass'](
					this.widgetBaseClass + '-disabled' + ' ' +
					this.namespace + '-state-disabled')
				.attr("aria-disabled", value);
		}
	},

	enable: function() {
		this._setData('disabled', false);
	},
	disable: function() {
		this._setData('disabled', true);
	},

	_trigger: function(type, event, data) {
		var callback = this.options[type],
			eventName = (type == this.widgetEventPrefix
				? type : this.widgetEventPrefix + type);

		event = $.Event(event);
		event.type = eventName;

		// copy original event properties over to the new event
		// this would happen if we could call $.event.fix instead of $.Event
		// but we don't have a way to force an event to be fixed multiple times
		if (event.originalEvent) {
			for (var i = $.event.props.length, prop; i;) {
				prop = $.event.props[--i];
				event[prop] = event.originalEvent[prop];
			}
		}

		this.element.trigger(event, data);

		return !($.isFunction(callback) && callback.call(this.element[0], event, data) === false
			|| event.isDefaultPrevented());
	}
};

$.widget.defaults = {
	disabled: false
};


/** Mouse Interaction Plugin **/

$.ui.mouse = {
	_mouseInit: function() {
		var self = this;

		this.element
			.bind('mousedown.'+this.widgetName, function(event) {
				return self._mouseDown(event);
			})
			.bind('click.'+this.widgetName, function(event) {
				if(self._preventClickEvent) {
					self._preventClickEvent = false;
					event.stopImmediatePropagation();
					return false;
				}
			});

		// Prevent text selection in IE
		if ($.browser.msie) {
			this._mouseUnselectable = this.element.attr('unselectable');
			this.element.attr('unselectable', 'on');
		}

		this.started = false;
	},

	// TODO: make sure destroying one instance of mouse doesn't mess with
	// other instances of mouse
	_mouseDestroy: function() {
		this.element.unbind('.'+this.widgetName);

		// Restore text selection in IE
		($.browser.msie
			&& this.element.attr('unselectable', this._mouseUnselectable));
	},

	_mouseDown: function(event) {
		// don't let more than one widget handle mouseStart
		// TODO: figure out why we have to use originalEvent
		event.originalEvent = event.originalEvent || {};
		if (event.originalEvent.mouseHandled) { return; }

		// we may have missed mouseup (out of window)
		(this._mouseStarted && this._mouseUp(event));

		this._mouseDownEvent = event;

		var self = this,
			btnIsLeft = (event.which == 1),
			elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false);
		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
			return true;
		}

		this.mouseDelayMet = !this.options.delay;
		if (!this.mouseDelayMet) {
			this._mouseDelayTimer = setTimeout(function() {
				self.mouseDelayMet = true;
			}, this.options.delay);
		}

		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
			this._mouseStarted = (this._mouseStart(event) !== false);
			if (!this._mouseStarted) {
				event.preventDefault();
				return true;
			}
		}

		// these delegates are required to keep context
		this._mouseMoveDelegate = function(event) {
			return self._mouseMove(event);
		};
		this._mouseUpDelegate = function(event) {
			return self._mouseUp(event);
		};
		$(document)
			.bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
			.bind('mouseup.'+this.widgetName, this._mouseUpDelegate);

		// preventDefault() is used to prevent the selection of text here -
		// however, in Safari, this causes select boxes not to be selectable
		// anymore, so this fix is needed
		($.browser.safari || event.preventDefault());

		event.originalEvent.mouseHandled = true;
		return true;
	},

	_mouseMove: function(event) {
		// IE mouseup check - mouseup happened when mouse was out of window
		if ($.browser.msie && !event.button) {
			return this._mouseUp(event);
		}

		if (this._mouseStarted) {
			this._mouseDrag(event);
			return event.preventDefault();
		}

		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
			this._mouseStarted =
				(this._mouseStart(this._mouseDownEvent, event) !== false);
			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
		}

		return !this._mouseStarted;
	},

	_mouseUp: function(event) {
		$(document)
			.unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
			.unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);

		if (this._mouseStarted) {
			this._mouseStarted = false;
			this._preventClickEvent = (event.target == this._mouseDownEvent.target);
			this._mouseStop(event);
		}

		return false;
	},

	_mouseDistanceMet: function(event) {
		return (Math.max(
				Math.abs(this._mouseDownEvent.pageX - event.pageX),
				Math.abs(this._mouseDownEvent.pageY - event.pageY)
			) >= this.options.distance
		);
	},

	_mouseDelayMet: function(event) {
		return this.mouseDelayMet;
	},

	// These are placeholder methods, to be overriden by extending plugin
	_mouseStart: function(event) {},
	_mouseDrag: function(event) {},
	_mouseStop: function(event) {},
	_mouseCapture: function(event) { return true; }
};

$.ui.mouse.defaults = {
	cancel: null,
	distance: 1,
	delay: 0
};

})(jQuery);

/* JQUERY UI SLIDER */

/*
 * jQuery UI Slider 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Slider
 *
 * Depends:
 *	ui.core.js
 */

(function($) {

$.widget("ui.slider", $.extend({}, $.ui.mouse, {

	_init: function() {

		var self = this, o = this.options;
		this._keySliding = false;
		this._handleIndex = null;
		this._detectOrientation();
		this._mouseInit();

		this.element
			.addClass("ui-slider"
				+ " ui-slider-" + this.orientation
				+ " ui-widget"
				+ " ui-widget-content"
				+ " ui-corner-all");

		this.range = $([]);

		if (o.range) {

			if (o.range === true) {
				this.range = $('<div></div>');
				if (!o.values) o.values = [this._valueMin(), this._valueMin()];
				if (o.values.length && o.values.length != 2) {
					o.values = [o.values[0], o.values[0]];
				}
			} else {
				this.range = $('<div></div>');
			}

			this.range
				.appendTo(this.element)
				.addClass("ui-slider-range");

			if (o.range == "min" || o.range == "max") {
				this.range.addClass("ui-slider-range-" + o.range);
			}

			// note: this isn't the most fittingly semantic framework class for this element,
			// but worked best visually with a variety of themes
			this.range.addClass("ui-widget-header");

		}

		if ($(".ui-slider-handle", this.element).length == 0)
			$('<a href="#"></a>')
				.appendTo(this.element)
				.addClass("ui-slider-handle");

		if (o.values && o.values.length) {
			while ($(".ui-slider-handle", this.element).length < o.values.length)
				$('<a href="#"></a>')
					.appendTo(this.element)
					.addClass("ui-slider-handle");
		}

		this.handles = $(".ui-slider-handle", this.element)
			.addClass("ui-state-default"
				+ " ui-corner-all");

		this.handle = this.handles.eq(0);

		this.handles.add(this.range).filter("a")
			.click(function(event) {
				event.preventDefault();
			})
			.hover(function() {
				if (!o.disabled) {
					$(this).addClass('ui-state-hover');
				}
			}, function() {
				$(this).removeClass('ui-state-hover');
			})
			.focus(function() {
				if (!o.disabled) {
					$(".ui-slider .ui-state-focus").removeClass('ui-state-focus'); $(this).addClass('ui-state-focus');
				} else {
					$(this).blur();
				}
			})
			.blur(function() {
				$(this).removeClass('ui-state-focus');
			});

		this.handles.each(function(i) {
			$(this).data("index.ui-slider-handle", i);
		});

		this.handles.keydown(function(event) {

			var ret = true;

			var index = $(this).data("index.ui-slider-handle");

			if (self.options.disabled)
				return;

			switch (event.keyCode) {
				case $.ui.keyCode.HOME:
				case $.ui.keyCode.END:
				case $.ui.keyCode.UP:
				case $.ui.keyCode.RIGHT:
				case $.ui.keyCode.DOWN:
				case $.ui.keyCode.LEFT:
					ret = false;
					if (!self._keySliding) {
						self._keySliding = true;
						$(this).addClass("ui-state-active");
						self._start(event, index);
					}
					break;
			}

			var curVal, newVal, step = self._step();
			if (self.options.values && self.options.values.length) {
				curVal = newVal = self.values(index);
			} else {
				curVal = newVal = self.value();
			}

			switch (event.keyCode) {
				case $.ui.keyCode.HOME:
					newVal = self._valueMin();
					break;
				case $.ui.keyCode.END:
					newVal = self._valueMax();
					break;
				case $.ui.keyCode.UP:
				case $.ui.keyCode.RIGHT:
					if(curVal == self._valueMax()) return;
					newVal = curVal + step;
					break;
				case $.ui.keyCode.DOWN:
				case $.ui.keyCode.LEFT:
					if(curVal == self._valueMin()) return;
					newVal = curVal - step;
					break;
			}

			self._slide(event, index, newVal);

			return ret;

		}).keyup(function(event) {

			var index = $(this).data("index.ui-slider-handle");

			if (self._keySliding) {
				self._stop(event, index);
				self._change(event, index);
				self._keySliding = false;
				$(this).removeClass("ui-state-active");
			}

		});

		this._refreshValue();

	},

	destroy: function() {

		this.handles.remove();
		this.range.remove();

		this.element
			.removeClass("ui-slider"
				+ " ui-slider-horizontal"
				+ " ui-slider-vertical"
				+ " ui-slider-disabled"
				+ " ui-widget"
				+ " ui-widget-content"
				+ " ui-corner-all")
			.removeData("slider")
			.unbind(".slider");

		this._mouseDestroy();

	},

	_mouseCapture: function(event) {

		var o = this.options;

		if (o.disabled)
			return false;

		this.elementSize = {
			width: this.element.outerWidth(),
			height: this.element.outerHeight()
		};
		this.elementOffset = this.element.offset();

		var position = { x: event.pageX, y: event.pageY };
		var normValue = this._normValueFromMouse(position);

		var distance = this._valueMax() - this._valueMin() + 1, closestHandle;
		var self = this, index;
		this.handles.each(function(i) {
			var thisDistance = Math.abs(normValue - self.values(i));
			if (distance > thisDistance) {
				distance = thisDistance;
				closestHandle = $(this);
				index = i;
			}
		});

		// workaround for bug #3736 (if both handles of a range are at 0,
		// the first is always used as the one with least distance,
		// and moving it is obviously prevented by preventing negative ranges)
		if(o.range == true && this.values(1) == o.min) {
			closestHandle = $(this.handles[++index]);
		}

		this._start(event, index);

		self._handleIndex = index;

		closestHandle
			.addClass("ui-state-active")
			.focus();
		
		var offset = closestHandle.offset();
		var mouseOverHandle = !$(event.target).parents().andSelf().is('.ui-slider-handle');
		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
			left: event.pageX - offset.left - (closestHandle.width() / 2),
			top: event.pageY - offset.top
				- (closestHandle.height() / 2)
				- (parseInt(closestHandle.css('borderTopWidth'),10) || 0)
				- (parseInt(closestHandle.css('borderBottomWidth'),10) || 0)
				+ (parseInt(closestHandle.css('marginTop'),10) || 0)
		};

		normValue = this._normValueFromMouse(position);
		this._slide(event, index, normValue);
		return true;

	},

	_mouseStart: function(event) {
		return true;
	},

	_mouseDrag: function(event) {

		var position = { x: event.pageX, y: event.pageY };
		var normValue = this._normValueFromMouse(position);
		
		this._slide(event, this._handleIndex, normValue);

		return false;

	},

	_mouseStop: function(event) {

		this.handles.removeClass("ui-state-active");
		this._stop(event, this._handleIndex);
		this._change(event, this._handleIndex);
		this._handleIndex = null;
		this._clickOffset = null;

		return false;

	},
	
	_detectOrientation: function() {
		this.orientation = this.options.orientation == 'vertical' ? 'vertical' : 'horizontal';
	},

	_normValueFromMouse: function(position) {

		var pixelTotal, pixelMouse;
		if ('horizontal' == this.orientation) {
			pixelTotal = this.elementSize.width;
			pixelMouse = position.x - this.elementOffset.left - (this._clickOffset ? this._clickOffset.left : 0);
		} else {
			pixelTotal = this.elementSize.height;
			pixelMouse = position.y - this.elementOffset.top - (this._clickOffset ? this._clickOffset.top : 0);
		}

		var percentMouse = (pixelMouse / pixelTotal);
		if (percentMouse > 1) percentMouse = 1;
		if (percentMouse < 0) percentMouse = 0;
		if ('vertical' == this.orientation)
			percentMouse = 1 - percentMouse;

		var valueTotal = this._valueMax() - this._valueMin(),
			valueMouse = percentMouse * valueTotal,
			valueMouseModStep = valueMouse % this.options.step,
			normValue = this._valueMin() + valueMouse - valueMouseModStep;

		if (valueMouseModStep > (this.options.step / 2))
			normValue += this.options.step;

		// Since JavaScript has problems with large floats, round
		// the final value to 5 digits after the decimal point (see #4124)
		return parseFloat(normValue.toFixed(5));

	},

	_start: function(event, index) {
		var uiHash = {
			handle: this.handles[index],
			value: this.value()
		};
		if (this.options.values && this.options.values.length) {
			uiHash.value = this.values(index);
			uiHash.values = this.values();
		}
		this._trigger("start", event, uiHash);
	},

	_slide: function(event, index, newVal) {

		var handle = this.handles[index];

		if (this.options.values && this.options.values.length) {

			var otherVal = this.values(index ? 0 : 1);

			if ((this.options.values.length == 2 && this.options.range === true) && 
				((index == 0 && newVal > otherVal) || (index == 1 && newVal < otherVal))){
 				newVal = otherVal;
			}

			if (newVal != this.values(index)) {
				var newValues = this.values();
				newValues[index] = newVal;
				// A slide can be canceled by returning false from the slide callback
				var allowed = this._trigger("slide", event, {
					handle: this.handles[index],
					value: newVal,
					values: newValues
				});
				var otherVal = this.values(index ? 0 : 1);
				if (allowed !== false) {
					this.values(index, newVal, ( event.type == 'mousedown' && this.options.animate ), true);
				}
			}

		} else {

			if (newVal != this.value()) {
				// A slide can be canceled by returning false from the slide callback
				var allowed = this._trigger("slide", event, {
					handle: this.handles[index],
					value: newVal
				});
				if (allowed !== false) {
					this._setData('value', newVal, ( event.type == 'mousedown' && this.options.animate ));
				}
					
			}

		}

	},

	_stop: function(event, index) {
		var uiHash = {
			handle: this.handles[index],
			value: this.value()
		};
		if (this.options.values && this.options.values.length) {
			uiHash.value = this.values(index);
			uiHash.values = this.values();
		}
		this._trigger("stop", event, uiHash);
	},

	_change: function(event, index) {
		var uiHash = {
			handle: this.handles[index],
			value: this.value()
		};
		if (this.options.values && this.options.values.length) {
			uiHash.value = this.values(index);
			uiHash.values = this.values();
		}
		this._trigger("change", event, uiHash);
	},

	value: function(newValue) {

		if (arguments.length) {
			this._setData("value", newValue);
			this._change(null, 0);
		}

		return this._value();

	},

	values: function(index, newValue, animated, noPropagation) {

		if (arguments.length > 1) {
			this.options.values[index] = newValue;
			this._refreshValue(animated);
			if(!noPropagation) this._change(null, index);
		}

		if (arguments.length) {
			if (this.options.values && this.options.values.length) {
				return this._values(index);
			} else {
				return this.value();
			}
		} else {
			return this._values();
		}

	},

	_setData: function(key, value, animated) {

		$.widget.prototype._setData.apply(this, arguments);

		switch (key) {
			case 'disabled':
				if (value) {
					this.handles.filter(".ui-state-focus").blur();
					this.handles.removeClass("ui-state-hover");
					this.handles.attr("disabled", "disabled");
				} else {
					this.handles.removeAttr("disabled");
				}
			case 'orientation':

				this._detectOrientation();
				
				this.element
					.removeClass("ui-slider-horizontal ui-slider-vertical")
					.addClass("ui-slider-" + this.orientation);
				this._refreshValue(animated);
				break;
			case 'value':
				this._refreshValue(animated);
				break;
		}

	},

	_step: function() {
		var step = this.options.step;
		return step;
	},

	_value: function() {

		var val = this.options.value;
		if (val < this._valueMin()) val = this._valueMin();
		if (val > this._valueMax()) val = this._valueMax();

		return val;

	},

	_values: function(index) {

		if (arguments.length) {
			var val = this.options.values[index];
			if (val < this._valueMin()) val = this._valueMin();
			if (val > this._valueMax()) val = this._valueMax();

			return val;
		} else {
			return this.options.values;
		}

	},

	_valueMin: function() {
		var valueMin = this.options.min;
		return valueMin;
	},

	_valueMax: function() {
		var valueMax = this.options.max;
		return valueMax;
	},

	_refreshValue: function(animate) {

		var oRange = this.options.range, o = this.options, self = this;

		if (this.options.values && this.options.values.length) {
			var vp0, vp1;
			this.handles.each(function(i, j) {
				var valPercent = (self.values(i) - self._valueMin()) / (self._valueMax() - self._valueMin()) * 84;
				var _set = {}; _set[self.orientation == 'horizontal' ? 'left' : 'bottom'] = valPercent + '%';
				$(this).stop(1,1)[animate ? 'animate' : 'css'](_set, o.animate);
				if (self.options.range === true) {
					if (self.orientation == 'horizontal') {
						(i == 0) && self.range.stop(1,1)[animate ? 'animate' : 'css']({ left: valPercent + '%' }, o.animate);
						(i == 1) && self.range[animate ? 'animate' : 'css']({ width: (valPercent - lastValPercent) + '%' }, { queue: false, duration: o.animate });
					} else {
						(i == 0) && self.range.stop(1,1)[animate ? 'animate' : 'css']({ bottom: (valPercent) + '%' }, o.animate);
						(i == 1) && self.range[animate ? 'animate' : 'css']({ height: (valPercent - lastValPercent) + '%' }, { queue: false, duration: o.animate });
					}
				}
				lastValPercent = valPercent;
			});
		} else {
			var value = this.value(),
				valueMin = this._valueMin(),
				valueMax = this._valueMax(),
				valPercent = valueMax != valueMin
					? (value - valueMin) / (valueMax - valueMin) * 84
					: 0;
			var _set = {}; _set[self.orientation == 'horizontal' ? 'left' : 'bottom'] = valPercent + '%';
			this.handle.stop(1,1)[animate ? 'animate' : 'css'](_set, o.animate);

			(oRange == "min") && (this.orientation == "horizontal") && this.range.stop(1,1)[animate ? 'animate' : 'css']({ width: valPercent + '%' }, o.animate);
			(oRange == "max") && (this.orientation == "horizontal") && this.range[animate ? 'animate' : 'css']({ width: (84 - valPercent) + '%' }, { queue: false, duration: o.animate });
			(oRange == "min") && (this.orientation == "vertical") && this.range.stop(1,1)[animate ? 'animate' : 'css']({ height: valPercent + '%' }, o.animate);
			(oRange == "max") && (this.orientation == "vertical") && this.range[animate ? 'animate' : 'css']({ height: (84 - valPercent) + '%' }, { queue: false, duration: o.animate });
		}

	}
	
}));

$.extend($.ui.slider, {
	getter: "value values",
	version: "1.7.2",
	eventPrefix: "slide",
	defaults: {
		animate: false,
		delay: 0,
		distance: 0,
		max: 84,
		min: 0,
		orientation: 'horizontal',
		range: false,
		step: 1,
		value: 0,
		values: null
	}
});

})(jQuery);

/* JQUERY EASING */


/*
 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
 *
 * Uses the built in easing capabilities added In jQuery 1.1
 * to offer multiple easing options
 *
 * TERMS OF USE - jQuery Easing
 * 
 * Open source under the BSD License. 
 * 
 * Copyright © 2008 George McGinley Smith
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 * 
 * Redistributions of source code must retain the above copyright notice, this list of 
 * conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice, this list 
 * of conditions and the following disclaimer in the documentation and/or other materials 
 * provided with the distribution.
 * 
 * Neither the name of the author nor the names of contributors may be used to endorse 
 * or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
 * OF THE POSSIBILITY OF SUCH DAMAGE. 
 *
*/

// t: current time, b: begInnIng value, c: change In value, d: duration
jQuery.easing['jswing'] = jQuery.easing['swing'];

jQuery.extend( jQuery.easing,
{
	def: 'easeOutQuad',
	swing: function (x, t, b, c, d) {
		//alert(jQuery.easing.default);
		return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
	},
	easeInQuad: function (x, t, b, c, d) {
		return c*(t/=d)*t + b;
	},
	easeOutQuad: function (x, t, b, c, d) {
		return -c *(t/=d)*(t-2) + b;
	},
	easeInOutQuad: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t + b;
		return -c/2 * ((--t)*(t-2) - 1) + b;
	},
	easeInCubic: function (x, t, b, c, d) {
		return c*(t/=d)*t*t + b;
	},
	easeOutCubic: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t + 1) + b;
	},
	easeInOutCubic: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t + b;
		return c/2*((t-=2)*t*t + 2) + b;
	},
	easeInQuart: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t + b;
	},
	easeOutQuart: function (x, t, b, c, d) {
		return -c * ((t=t/d-1)*t*t*t - 1) + b;
	},
	easeInOutQuart: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
		return -c/2 * ((t-=2)*t*t*t - 2) + b;
	},
	easeInQuint: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t*t + b;
	},
	easeOutQuint: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t*t*t + 1) + b;
	},
	easeInOutQuint: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
		return c/2*((t-=2)*t*t*t*t + 2) + b;
	},
	easeInSine: function (x, t, b, c, d) {
		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
	},
	easeOutSine: function (x, t, b, c, d) {
		return c * Math.sin(t/d * (Math.PI/2)) + b;
	},
	easeInOutSine: function (x, t, b, c, d) {
		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
	},
	easeInExpo: function (x, t, b, c, d) {
		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
	},
	easeOutExpo: function (x, t, b, c, d) {
		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
	},
	easeInOutExpo: function (x, t, b, c, d) {
		if (t==0) return b;
		if (t==d) return b+c;
		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
	},
	easeInCirc: function (x, t, b, c, d) {
		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
	},
	easeOutCirc: function (x, t, b, c, d) {
		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
	},
	easeInOutCirc: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
	},
	easeInElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
	},
	easeOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
	},
	easeInOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
	},
	easeInBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*(t/=d)*t*((s+1)*t - s) + b;
	},
	easeOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
	},
	easeInOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158; 
		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
	},
	easeInBounce: function (x, t, b, c, d) {
		return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
	},
	easeOutBounce: function (x, t, b, c, d) {
		if ((t/=d) < (1/2.75)) {
			return c*(7.5625*t*t) + b;
		} else if (t < (2/2.75)) {
			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
		} else if (t < (2.5/2.75)) {
			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
		} else {
			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
		}
	},
	easeInOutBounce: function (x, t, b, c, d) {
		if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
		return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
	}
});

/*
 *
 * TERMS OF USE - EASING EQUATIONS
 * 
 * Open source under the BSD License. 
 * 
 * Copyright © 2001 Robert Penner
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 * 
 * Redistributions of source code must retain the above copyright notice, this list of 
 * conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice, this list 
 * of conditions and the following disclaimer in the documentation and/or other materials 
 * provided with the distribution.
 * 
 * Neither the name of the author nor the names of contributors may be used to endorse 
 * or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
 * OF THE POSSIBILITY OF SUCH DAMAGE. 
 *
 */
 
 /* JQUERY ACCORDION */
 
 //# jQuery - Horizontal Accordion
//# Version 2.00.00 Alpha 1
//#
//# portalZINE(R) - New Media Network
//# http://www.portalzine.de
//#
//# Alexander Graef
//# portalzine@gmail.com
//#
//# Copyright 2007-2009

(function($) {
	$.hrzAccordion = {
       
	   
	   setOnEvent: function(i, container, finalWidth, settings){
			$("#"+container+"Handle"+i).bind(settings.eventTrigger,function() {			 
			   			
						var status = $('[rel='+container+'ContainerSelected]').data('status');
						
						if(status ==1 && settings.eventWaitForAnim === true){
						 return false;	
						}
						
						if( $("#"+container+"Handle"+i).attr("rel") != container+"HandleSelected"){
			    		
						  settings.eventAction(i);
							
							$('[id*='+container+'Handle]').attr("rel","");			   				
			   				
							$('[id*='+container+'Handle]').attr("class",settings.handleClass);
		
			   				$("#"+container+"Handle"+i).addClass(settings.handleClassSelected);
										   
			   		
							$("."+settings.contentWrapper).css({width: finalWidth+"px" });
							
							switch(settings.closeOpenAnimation)
							{
							case 1:
      
				   
						if($('[rel='+container+'ContainerSelected]').get(0)  ){
						$('[rel='+container+'ContainerSelected]').data('status',1);
							
							//current_width = $('[rel='+container+'ContainerSelected]').width();
							
							$('[rel='+container+'ContainerSelected]').animate({width: "0px",opacity:"0"}, 
																			  {queue:true, 
																			  duration:settings.closeSpeed ,easing:settings.closeEaseAction,complete: function(){	
				 																																	
							$('[rel='+container+'ContainerSelected]').data('status',0);	
							settings.completeAction(i);
							} ,step: function(now){
																																																		 							width = $(this).width();
						
							//new_width = finalWidth- (finalWidth  * (width/current_width));
							new_width = finalWidth - width;
							$('#'+container+'Content'+i).width(Math.ceil(new_width)).css("opacity","1");
							
							}});
		
						}else{
							$('[rel='+container+'ContainerSelected]').data('status',1);
								
							$('#'+container+'Content'+i).animate({width: finalWidth,opacity:"1"}, { queue:false, duration:settings.closeSpeed ,easing:settings.closeEaseAction,complete: function(){
																																																	  $('[rel='+container+'ContainerSelected]').data('status',0);	
																																																	  settings.completeAction(i);	
																																																	  }});
							
								
							}
							
							break;
							case 2:
								$('[id*='+container+'Content]').css({width: "0px"});
								$('#'+container+'Content'+i).animate({width: finalWidth+"px",opacity:"1"}, { queue:false, duration:settings.openSpeed ,easing:settings.openEaseAction, complete: 
 settings.completeAction(i)																																																									});						
							
							break;
							}

							$('[id*='+container+'Content]').attr("rel","");			
							$("#"+container+"Handle"+i).attr("rel",container+"HandleSelected");
							$("#"+container+"Content"+i).attr("rel",container+"ContainerSelected");					
							
						
						}
						
					});	
}
	    };
	
	$.fn.extend({
	   
		hrzAccordionLoop: function(options) {
			return this.each(function(a){  
				
				var container = $(this).attr("id") || $(this).attr("class");
				var elementCount = $('#'+container+' > li, .'+container+' > li').size();
				var settings = $(this).data('settings');
				
				variable_holder="interval"+container ;
				var i = 1;
				var loopStatus  = "start";
				
				variable_holder = window.setInterval(function(){							
				
				$("#"+container+"Handle"+i).trigger(settings.eventTrigger);
				
				if(loopStatus =="start"){
						i = i + 1;
					}else{
						i = i-1;	
					}
					
					if(i==elementCount && loopStatus  == "start"){
						loopStatus = "end";
						i=elementCount-2;

					}
					
					if(i==0 && loopStatus  == "end"){
						loopStatus  = "start";
						i=0;

					}
												},settings.cycleInterval);
				
				
				});
			},
		hrzAccordion: function(options) {
			this.settings = {
			eventTrigger	   		: "mouseover",
			containerClass     		: "container",
			listItemClass      		: "listItem",					
			contentContainerClass  	: "contentContainer",
			contentWrapper     		: "contentWrapper",
			contentInnerWrapper		: "contentInnerWrapper",
			handleClass        		: "handle",
			handleInnerWrapper 		: "handleInnerWrapper",
			handleClassOver    		: "handleOver",
			handleClassSelected		: "handleSelected",
			handlePosition     		: "left",
			handlePositionArray		: "", // left,left,right,right,right
			closeEaseAction    		: "swing",
			closeSpeed     			: 500,
			openEaseAction     		: "swing",
			openSpeed      			: 500,
			openOnLoad		   		: 1,
			hashPrefix		   		: "tab",
			eventAction		   		: function(i){
								 		
								 	},
			completeAction	   		: function(i){
								 	
								 	},
			closeOpenAnimation 		: 1,// 1 - open and close at the same time / 2- close all and than open next
			cycle			   		: true, // not integrated yet, will allow to cycle through tabs by interval
			cycleInterval	   		: 4000,
			fixedWidth				: "",
			eventWaitForAnim		: true
				
		};
	
		if(options){
			$.extend(this.settings, options);
		}
			var settings = this.settings;
			
			
			
			return this.each(function(a){    		
				
				var container = $(this).attr("id") || $(this).attr("class");			
				
				$(this).data('settings', settings);
				
				$(this).wrap("<div class='"+settings.containerClass+"'></div>");
			
				var elementCount = $('#'+container+' > li, .'+container+' > li').size();
												
				var containerWidth =  $("."+settings.containerClass).width();
				
				var handleWidth = $("."+settings.handleClass).css("width");
		
				handleWidth =  handleWidth.replace(/px/,"");
			    var finalWidth;
				var handle;
				
				if(settings.fixedWidth){
					finalWidth = settings.fixedWidth;
				}else{
					finalWidth = containerWidth-(elementCount*handleWidth)-handleWidth;
				}
				
				$('#'+container+' > li, .'+container+' > li').each(function(i) {
			
					$(this).attr('id', container+"ListItem"+i);
			   		$(this).attr('class',settings.listItemClass);
		       		$(this).html("<div class='"+settings.contentContainerClass+"' id='"+container+"Content"+i+"'>"
								 +"<div class=\""+settings.contentWrapper+"\">"
								 +"<div class=\""+settings.contentInnerWrapper+"\">"
								 +$(this).html()
								 +"</div></div></div>");
			   		
					if($("div",this).hasClass(settings.handleClass)){
					
					var html = $("div."+settings.handleClass,this).attr("id",""+container+"Handle"+i+"").html();
					$("div."+settings.handleClass,this).remove();
					
					 handle = "<div class=\""+settings.handleClass+"\" id='"+container+"Handle"+i+"'>"
					 +"<div class=\""+settings.handleInnerWrapper+"\">"
					 +html+"</div></div>";
					}else{
					 handle = "<div class=\""+settings.handleClass+"\" id='"+container+"Handle"+i+"'></div>";
					}
					
				
					
					if(settings.handlePositionArray){
						splitthis 				= settings.handlePositionArray.split(",");
						settings.handlePosition = splitthis[i];
					}
					
					switch(settings.handlePosition ){
						case "left":
						$(this).prepend( handle );
						break;
						case "right":	
						$(this).append( handle );	
						break;
						case "top":	
						$("."+container+"Top").append( handle );	
						break;
						case "bottom":	
						$("."+container+"Bottom").append( handle );	
						break;
					}					
				
					$("#"+container+"Handle"+i).bind("mouseover", function(){
						$("#"+container+"Handle"+i).addClass(settings.handleClassOver);
					});
			    
					$("#"+container+"Handle"+i).bind("mouseout", function(){
						if( $("#"+container+"Handle"+i).attr("rel") != "selected"){
							$("#"+container+"Handle"+i).removeClass(settings.handleClassOver);
						}
					});
					
				
					$.hrzAccordion.setOnEvent(i, container, finalWidth, settings);				
					
					if(i == elementCount-1){
						$('#'+container+",."+container).show();					
					}
					
					
								
					if(settings.openOnLoad !== false && i == elementCount-1){
							var location_hash = location.hash;
							location_hash  = location_hash.replace("#", "");	
							if(location_hash.search(settings.hashPrefix) != '-1' ){
							var tab = 1;
							location_hash  = location_hash.replace(settings.hashPrefix, "");
							}
							
							if(location_hash && tab ==1){
						 		$("#"+container+"Handle"+(location_hash)).attr("rel",container+"HandleSelected");
								$("#"+container+"Content"+(location_hash)).attr("rel",container+"ContainerSelected");		
								$("#"+container+"Handle"+(location_hash-1)).trigger(settings.eventTrigger);
												
							}else{
								$("#"+container+"Handle"+(settings.openOnLoad)).attr("rel",container+"HandleSelected");
							    $("#"+container+"Content"+(settings.openOnLoad)).attr("rel",container+"ContainerSelected");	
								$("#"+container+"Handle"+(settings.openOnLoad-1)).trigger(settings.eventTrigger);
							}					
					}	
				});	
				
				if(settings.cycle === true){
					$(this).hrzAccordionLoop();
				}
			});				
		}		
	});
})(jQuery);	

/* P203 LAYER */


/*
 * jQuery toplayer
 * By: PRODUKTION 203 AB
 * Version 1.2
 * Last Modified: 2009-10-20
 * 
 * Copyright 2009 PRODUKTION 203
 * 
 */
 
(function($) {
	$.prompt = function(message, options) {
		
		options = $.extend({},$.prompt.defaults,options);
		
		var $body	= $(document.body);
		var $window	= $(window);
		
		if(options.bg) {
			var background = '<div id="toplayer-'+ options.prefix +'-bg"></div>';
		}
		var style = '';
		if(options.width != 0) {
			style += 'width: ' + options.width + 'px;';	
		}
		// If its ie7 we have to set position fixed because changing position through javascript isnt working
		if(checkIE(7)) {
			style += 'position: fixed;';	
		}
		
		//Toplayer htmlbox
		var boxhtml = '<table cellspacing="0" cellpadding="0"' + (style.length == 0 ? "" : ' style="' + style + '"') + ' class="toplayer" id="toplayer-' + options.prefix + '">';
		boxhtml += '<tr><td class="top_left"></td><td class="top_center">';
		if(options.topArrow && !checkIE(6)) {
			boxhtml += '<img src="/img/site/toplayer-submenu-arrow.png" alt=""' + (options.ArrowLeft > 0 ? ' style="margin-left: ' + options.ArrowLeft + 'px;"' : '') +' />';	
		}
		boxhtml += '</td><td class="top_right"></td></tr>';
		boxhtml += '<tr>';
		boxhtml += '<td class="left"></td>';
		boxhtml += '<td class="content">';
		if(options.title.length > 0) {
			boxhtml += '<div class=\'head-toplayer';
			
			if(options.error == 1) {
			
				boxhtml += ' error_box';
			}
			
			boxhtml += '\'>';
			boxhtml += '<h1 id="toplayer-title-' + options.prefix + '">' + options.title + '</h1>';
			boxhtml += '</div>';
		}
		if(options.closer == 1) {
			boxhtml += '<a href="javascript:void(0);" class="close-link" id="toplayer-close-' + options.prefix + '"><img src="' + (checkIE(6) ? '/img/site/spacer.png' : (options.error == 1) ? '/img/site/toplayer-close_error.png' : '/img/site/toplayer-close.png') + '" id="layer-close-' + options.prefix + '" alt="St&auml;ng" title="St&auml;ng" class="right" /></a>';
		}
		
		boxhtml += '<div class="layercontent';
		
		if(options.text == 1) {
		
			boxhtml += " is_text";
		
		}
		
		boxhtml += '" id="layer-content-' + options.prefix + '">' + message + '</div>';
		boxhtml += '</td><td class="right"></td></tr><tr><td class="bottom_left"></td><td class="bottom_center"></td><td class="bottom_right"></td></tr></table>';
		
		
		if(options.bg) {
			var $bglayer = $(background).appendTo($body);
		}
		var $toplayer = $(boxhtml).appendTo($body);
		
		// Set transaprent style for bg layer if we needed one
		
		if(options.bg) {
			$bglayer.css({
				height: $("#footer").height() + $("#footer").offset().top + 25 + "px",
				opacity: options.opacity,
				width: '100%',
				backgroundColor: '#000000',
				position: 'absolute',
				zIndex: 999,
				top: 0,
				left: 0
			});
		}
		
		
		// Position the toplayer correctly
		// This is if toplayer is shorter than window height
		// Then position it centered and fixed
		if($toplayer.height() < $window.height()) {
			
				if(options.forceAbsolute) {
					
					$toplayer.css({ 
						top: options.top + 'px', 
						left: options.left + 'px'
					});
					
				}else{
				
					$toplayer.css({ 
						position: 'fixed', 
						top: (($window.height()-$toplayer.height())/2) + 'px', 
						left: (($window.width()-$toplayer.width())/2) + 'px'
					});
				}
		
		// Else use absolute positioning so we can scroll with it
		}else{
			
			var scrolloffset = $window.scrollTop();
			
			if((scrolloffset + $toplayer.height()) > $body.height()) {
				
				var newtop = $body.height() - $toplayer.height();
			}else{
				var newtop = scrolloffset;	
			}
			
			$toplayer.css({ 
						  
				top: newtop + 'px', 
				left: (($window.width()-$toplayer.width())/2) + 'px'
			});
			
			
		}
		
		// If we want a close button bind that button so its clickable
		if(options.closer == 1) {
			
			$toplayer.find('#toplayer-close-' + options.prefix).click(function() {
				$('#toplayer-' + options.prefix).remove();
				if(options.bg) {
					$('#toplayer-'+ options.prefix +'-bg').remove();
				}
			});
		}	
	};
	
	$.prompt.defaults = {
		prefix:'toplayer',
		error: 0,
		title: '',
		text : 0,
		bg: true,
		forceAbsolute: false,
		topArrow: false,
		ArrowLeft: 0,
		ArrowTop: 0,
		top: 0,
		left: 0,
		opacity: 0.55,
		closer: 1,
		width: 0
	};
	
	
})(jQuery);




/* ========================================= */

/* "RANDOM" VALUES */


var sizes = new Array();
				
sizes[0] = "xs";
sizes["xs"] = 0;
sizes[21] = "s";
sizes["s"] = 21;
sizes[42] = "m";
sizes["m"] = 42;
sizes[63] = "l";
sizes["l"] = 63;
sizes[84] = "xl";
sizes["xl"] = 84;


/* "RANDOM" FUNCTIONS */

function get_products(products, size, page, subpage, subsub, pageid) {

jQuery.ajax
		({
			url : "/inc/modules/" + products + ".php",
			cache : false, 
			dataType : "text",
			data : {ajax : "true", 
				   size : size, 
				   page : page,
				   subpage : subpage,
				   subsub : subsub,
				   pageid : pageid},
				   
			type : "GET",
			beforeSend : function(xhr) {
				
				var cookie_options = {path: "/", expires: 10};
				
				$.cookie("size", size, cookie_options);
			},
			error: function(xhr)
			{},
			success: function(text) {
			
				$(".products").html(text);
				
				$(".products").attr("id", size + "_products");
			}
		});
}

function show_bill_form() {
				
	if($(".payment_buttons").length > 0) {
		
		$(".payment_buttons").hide();
		
		$(".bill_payment").css({"margin" : "50px 0 0 0"});
		$(".bill_payment").fadeIn("slow");
		
		var link_text = new Array();
		
		link_text["se"] = "Tillbaka till betalningssätt";
		link_text["en"] = "Back to payment methods"
		
		$(".back_to_overview #back_to_overview").html(link_text[$.cookie("lang")]).attr({"href" : "/" + $.cookie("lang") + "/payment"});
		
	}
}

function open_window(url, order_id, type) {

	// popupstorlek
	var popupWidth = 670;
	var popupHeight = 530;

	if(type == 'locadi') {

	    order_use_locadi(order_id);	
	}
	else if(type == 'transaver') {

	    order_use_transaver(order_id);

	    popupWidth = 1000;
	    popupHeight = 800;
	}
	
		
	// sätter popupen i mitten av skärmen
	var y = (($(window).height() / 2) - (popupHeight / 2));
	var x = (($(window).width() / 2) - (popupWidth / 2));
		
	var popup = window.open(url, "Locadi", "toolbar=no,location=no,directories=no,status=no,width=" + popupWidth + ",height=" + popupHeight + ",resize=no,scrollbars=yes,top=" + y + ",left=" + x);
		
	if(!popup) {
	
		Messaage.alert("POPUP_BLOCKED", false);
	}

}

function show_another_shipping_text() {

	if($(".shipping_boxes").length > 0) {
	
		$(".shipping_boxes").remove();
	}
	
	var texts = new Array();
	
	texts["se"] = new Array("Steg 3, Välj frakt - annat fraktsätt", "Glöm inte att ange ditt ordernummer!", "Ange även hämteadressen som du finner nedan.");
	texts["en"] = new Array("Step 3, Shipment - another method", "Do not forget to enter your order number!", "Declare the address below as retrieving address.");
	
	$("#big_cart h1").html(texts[$.cookie("lang")][0]);
	$("#big_cart h2").html(texts[$.cookie("lang")][1]);
	$("#big_cart h3").html(texts[$.cookie("lang")][2]);
	
	$("#big_cart .extra_info").remove();
	
	$(".another_shipping").show();
}

/* BASKET */

var locadiUrl = "http://www.locadi.com/shipcalc_step1.asp?receivercountryid=2&action=Import&vps=38&odata=";

var products = new Array();
var zipCode = "00000";

var total_weight = 0;
var total_items = 0;

var total_counter = 0;
		
//var Cart = {

	function cart_init(after_onload) {
	
		// resetar värden
		
		if(total_weight > 0 && after_onload) {
		
			total_weight = 0;
		}
		
		if(total_items > 0 && after_onload) {
	
			total_items = 0;
		}
	
		// sammlar priserna
		
		$(".total_weight").each(function(i) {
			
			if($(this).attr("type") == "hidden") {
			
				if(parseFloat($(this).val()) > 0) {

					total_weight += parseFloat($(this).val());
				}
			}
		});
		
		$(".cart_info .weight span").html(parseFloat(total_weight));
		
		// sammlar produktantalet
		
		$(".product .number").each(function(i) {
		
			var pid = $(this).attr("id").replace(/quantity_/gi, "");
		
			if($("#bottles_" + pid).val() > 1) {
			
				if($("#quantity_count_"  + pid).length > 0) {
			
					var q = $("#quantity_count_"  + pid).val();
				}
				else if($("#quantity_" + pid).length > 0) {
				
					var q = $("#quantity_" + pid).html();
				}
				
				total_items += (1 * parseInt(q));
				
			}
			else {
		
				total_items += (parseInt($(this).html()) / 6);
			}
		});
		
		// avrundar så att allt stämmer
		
		total_items = Math.round(total_items * 100) / 100;
		
		$(".cart_info .count span").html(parseInt(total_items));
		
		// "kopierar" värden från ett element till ett annat
		
		$(".cart_info .price span").html($(".totalprice").html());
	}

	function cart_check() {
	
		// kollar om antalet flaskor är ok
		
		var flag = false;
		var total_kilo = 0;
		var item_total = 0;
		
		if($(".checkable").length > 0) {
		
			$(".checkable").each(function(i){
	
				var item_weight = parseFloat($(this).find(".description .top .weight .w").html());
			
				var item_number_of = parseInt($(this).find(".description .bottom .number_of_products").val());
			
				total_kilo += (item_weight * item_number_of);
				
				item_total += item_number_of;
			
			});
			
			if(item_total % 6 != 0) {
			
				flag = false;
			}
			else {
			
				flag = true;
			}
		}
		else {
		
			if(item_total == 0 && $(".checkable").length > 0) {
			
				flag = false;
			}
			else {
			
				flag = true;
			}
		}
		
		$.cookie("too_much", item_total % 6);
		
		if(flag) {
		
			user_login("cart");
		
		}
		else {
		
			message_alert("WRONG_NUMBER_OF_BOTTLES", false);
			
			cart_mark_fields();
		}
	}

	function cart_mark_fields() {
	
		if($(".checkable").length > 0) {
	
			$(".checkable").each(function(i) {
				
				$(this).addClass("invalid_product_count");
				
			});
		}
	}
	
	function cart_unmark_fields() {
	
		if($(".checkable").length > 0) {
		
			$(".checkable").each(function(i) {
				
				if($(this).hasClass("invalid_product_count")) {
				
					$(this).removeClass("invalid_product_count");
				}
				
			});
		}
	}

	function cart_go_to_cart(language) {
	
		window.location = "/" + $.cookie("lang") + "/basket";
	}

	function cart_round_price(price) {
	
		var dec = 1;
		var integer = parseFloat(price);
		
		return parseFloat(integer.toFixed(2));
	}
	
	function cart_open_klarna_window() {
	
		var url = "http://online.kreditor.se/villkor.yaws?eid=4836&charge=37";
		
		// popupstorlek
		var popupWidth = 500;
		var popupHeight = 240;
		
		// sätter popupen i mitten av skärmen
		var y = (($(window).height() / 2) - (popupHeight / 2));
		var x = (($(window).width() / 2) - (popupWidth / 2));
		
		var popup = window.open(url, "Locadi", "toolbar=no,location=no,directories=no,status=no,width=" + popupWidth + ",height=" + popupHeight + ",resize=no,scrollbars=no,top=" + y + ",left=" + x);
		
		if(!popup) {
			message_alert("POPUP_BLOCKED", false);
		}
	}
	
	function cart_open_locadi_calc() {

		var url = locadiUrl;
	
		// itererar över varje element i kundkorgen (lilla)
		$(".productlist .product").each(function(i){
		
			// id = product_XXX, vi vill ha "XXX"
			var id = $(this).attr("id").split("_")[1];
		
			var quantity = $("#quantity_" + id).html();
			var weight = $("#weight_" + id).val();
			var price = $("#price_" + id).html();
			
			url += escape(quantity + ";www.bodegashop.com;" + parseFloat(weight) + ";" + parseFloat(price) + "#");
		});
			
		url = url.substr(0, url.length - 1) + "&ReceiverZip=" + zipCode;
		
		// popupstorlek
		var popupWidth = 500;
		var popupHeight = 290;
		
		// sätter popupen i mitten av skärmen
		var y = (($(window).height() / 2) - (popupHeight / 2));
		var x = (($(window).width() / 2) - (popupWidth / 2));
		
		var popup = window.open(url, "Locadi", "toolbar=no,location=no,directories=no,status=no,width=" + popupWidth + ",height=" + popupHeight + ",resize=no,scrollbars=no,top=" + y + ",left=" + x);
		
		if(!popup) {
			messaage_alert("POPUP_BLOCKED", false);
		}
	}


	// updaterar "quantity_count"-fältet
	
	function cart_update_quantity_field(product_id, mode) {
		
		if(mode == "increase") {

			$("#quantity_count_" + product_id).val(parseInt($("#quantity_count_" + product_id).val()) + 1);
		}
		else {
			
			if(parseInt($("#quantity_count_" + product_id).val()) > 1) {
			
				$("#quantity_count_" + product_id).val(parseInt($("#quantity_count_" + product_id).val()) - 1);
			}
			else {
			
				$("#quantity_count_" + product_id).val("1");
			}
		}
	}
	
	// lägger in produktinformation i cookien + DOM

	function cart_add(product_id, simple) {
		
		cart_unmark_fields();
		
		cart_get(product_id, simple);
	}
	
	// hämtar produktinformation från db || simple = om man klickar på [+]-knappen och quantity-fältet är större än ett, multiplicera inte med quantity
	
	function cart_get(product_id, simple) {
	
		// hämtar quantity
		
		if($("#quantity_count_" + product_id).length > 0 && !simple) {
		
			var quantity = $("#quantity_count_" + product_id).val();
		}
		else if($("#number_of_" + product_id).length > 0 && !simple) {
		
			var quantity = $("#number_of_" + product_id).val();
		}
		else {
		
			var quantity = 1;
		}	
	
		jQuery.ajax({
		
			url : "/inc/modules/ajax/get_product.php",
			cache : false,
			dataType : "json",
			data : {ajax : "true", product_id : product_id, quantity : quantity},
			type : "POST",
			beforeSend : function(xhr) {},
			
			error: function(xhr){},
			
			success: function(json) {
				// sparar undan produkten
			
				alert("Produkten lades till i din varukorg");
			
				products.push(json.iProductId);
				
				// avrundar priset till 2 siffror efter komman
						
				if(parseFloat(json.iCurrPrice) != 0.00) {
				
					var price = (json.fixedCurrPrice * json.quantity);
				}
				else {
						
					var price = (json.fixedOrgPrice * json.quantity);
				}
	
				// updaterar fälten i kassan, steg 1
				
				if($(".cart_info").length > 0) {

					$(".cart_info .price span").html(json.totalPrice);
					
					// om man besöker sidan för första gången
					
					if(total_counter == 0) {
					
						$(".product .number").each(function(i) {
		
							var pid = $(this).attr("id").replace(/quantity_/gi, "");
		
							if($("#bottles_" + pid).val() > 1) {
							
								total_counter += 6;
							
							}
							else {
							
								total_counter += parseInt($(this).html());
							}
						});
					}
					
					// fixar priset så att inga låååååånga decimaler visas
					
					var x = parseFloat($(".cart_info .weight span").html()) + parseFloat(json.iWeight);
					var n = Math.round( x * Math.pow(10, 2)) / Math.pow(10, 2);
					
					$(".cart_info .weight span").html(n);
				}
				
				if((total_counter + 1) % 6 == 0 || json.iBottles > 1) {
					
					$(".cart_info .count span").html(parseInt($(".cart_info .count span").html()) + parseInt(json.quantity));
					total_counter += parseInt(json.quantity);
				}
				else {
					
					total_counter += parseInt(json.quantity);
				}
	
				// totala priset beräknas på servern
				
				$(".totalprice").html(json.totalPrice);
			
				// kollar i fall produkten ligger bland de sparade
			
				for(var i = 0; i < products.length; i++) {
				
					// om den gör det, uppdatera listan
				
					if(products[i] == json.iProductId) {
						
						// uppdaterar fält
						
						if($("#product_" + json.iProductId).length < 1) { 
						
							var currency = "kr";
							
							if($.cookie("lang") == "en") {
							
								currency = "&euro;";
							}
						
							var html = "";
							
							html += "<li class=\"product\" id=\"product_" + json.iProductId + "\">";
							html += "<span id=\"quantity_" + json.iProductId + "\" class=\"number\">" + parseInt(json.quantity) + "</span>";
							
							// replace'ar svenska tecken, om short_name funktionen drar för mycket tecken...
							
							var short_name = json.short_name.replace("\\", "");
							
							short_name = short_name.replace("&auml;", "ä");
							short_name = short_name.replace("&ouml;", "ö");
							
							short_name = short_name.replace("&aum", "ä");
							short_name = short_name.replace("&oum", "ö");
							
							
							// json.iCategoryId = 9 == bag.in.box
							
							if(json.iBottles > 1 && json.iCategory != 9) {
							
								html += "<span class=\"name\">" + json.iBottles + "x" + short_name + "</span>";
							}
							else {
							
								html += "<span class=\"name\">" + short_name + "</span>";
							}
							
							html += "<span id=\"price_" + json.iProductId + "\" class=\"price\">" + cart_round_price(price) + "</span>";
							html += "<span class=\"currency\">" + currency + "</span>";
							html += "<input type=\"hidden\" value=\"" + parseFloat(json.iWeight) + "\" id=\"weight_" + json.iProductId + "\" class=\"weight\" />";
							html += "<input type=\"hidden\" value=\"" + parseFloat(json.iBottles) + "\" id=\"bottles_" + json.iProductId + "\" class=\"bottles\" />";
							html += "</li>";
						
							$(".productlist").append(html);
							
							return false;
						}
						else {
						
						
							$("#quantity_" + json.iProductId).html(parseInt($("#quantity_" + json.iProductId).html()) + parseInt(json.quantity));
							
							var old_price = $("#price_" + json.iProductId).html();
						
							var total_price = parseFloat(price) + parseFloat(old_price);
							
							$("#price_" + json.iProductId).html(json.totalPriceForThisProduct);
							$("#total_weight_" + json.iProductId).html(parseInt(json.iWeight) * parseInt(json.quantity));
							
							if($("#big_price_" + json.iProductId).length > 0) {
							
								$("#big_price_" + json.iProductId).html(json.totalPriceForThisProduct);
							}
							
							return false;
						}
					}
				}
			}
		});
	}
	
	// tar bort produktinformation från cookien + DOM
	
	function cart_remove(product_id, simple) {
		
		cart_unmark_fields();
		
		jQuery.ajax({
		
			url : "/inc/modules/ajax/remove_product.php",
			cache : false,
			dataType : "json",
			data : {ajax : "true", product_id : product_id},
			type : "POST",
			beforeSend : function(xhr) {},
			
			error: function(xhr){},
			
			success: function(json) {
				
				
				// om man besöker sidan för första gången
					
				if(total_counter == 0) {
					
					$(".product .number").each(function(i) {
		
						total_counter += parseInt($(this).html());
					});
				}
				
				// hämtar antalet artiklar
				var quantity = parseInt($("#quantity_" + product_id).html());
				
				if(quantity != 1) {
					
					
					// uppdaterar även fältet, om användaren klickade på (X)-bilden
					
					if(simple) {
					
						if($("#quantity_count_" + product_id).length > 0) {
					
							cart_update_quantity_field(product_id, "reduce");
						}
					}
					
					// sätter in den totala vikten för produkten
										
					$("#total_weight_" + product_id).val(parseFloat(json.productTotalWeight));
				}
				else {
					
					
					$("#product_" + product_id).remove();
				
					// den "stora" varukorgen är synlig
							
					if($("#cart_product_" + product_id).length > 0) {
							
						$("#cart_product_" + product_id).remove();
					}
					
					$("#total_weight_" + product_id).val(parseFloat(json.productTotalWeight));
				}
				
				$("#weight_" + product_id).val(json.productTotalWeight);
				
				$("#quantity_" + product_id).html(parseInt($("#quantity_" + product_id).html()) - 1);
				
				// till slut uppdatera det totala priset
				
				if(json.iBottles > 1) {
				
					total_counter -= 6;
				}
				else {
					total_counter--;
				}
				
				cart_update_prices(json.productId, json.totalPrice, json.productTotalPrice);
			}
		});
	}
	
	function cart_update_prices(product_id, total_price, product_total_price, total_weight) {
	
		if($(".totalprice").length > 0) {
		
			if(total_price == null) {
			
				total_price = 0;
			}
			
			$(".totalprice").html(cart_round_price(total_price));
			
			if($("#price_" + product_id).length > 0) {
			
				$("#price_" + product_id).html(cart_round_price(product_total_price));
			}
			
			if($("#big_price_" + product_id).length > 0) {
			
				$("#big_price_" + product_id).html(cart_round_price(product_total_price));
			}
			
			// uppdaterar "cart_info" boxen
			
			cart_init(true);
		}
	}

/* MESSAGE */


	function message_show(key, klarna, v) {

		var messages = new Array();
	
		messages["se"] = new Array();
		messages["en"] = new Array();
	
		// små fraser som används lite överallt
		
		messages["se"]["EMAIL"] = "E-postadress";
		messages["en"]["EMAIL"] = "E-mail address";

		messages["se"]["SHIPPING"] = "Transport - Prislista";
		messages["en"]["SHIPPING"] = "Transport - Price list";
		
		messages["se"]["NAME"] = "Namn";
		messages["en"]["NAME"] = "Name";
		
		messages["se"]["SURNAME"] = "Efternamn";
		messages["en"]["SURNAME"] = "Surname";
		
		messages["se"]["CONTINUE"] = "Nästa steg";
		messages["en"]["CONTINUE"] = "Next step";
		
		messages["se"]["CHOOSE_PASSWORD"] = "Välj ett lösenord";
		messages["en"]["CHOOSE_PASSWORD"] = "Choose password";
		
		messages["se"]["REPEAT_PASSWORD"] = "Upprepa lösenordet";
		messages["en"]["REPEAT_PASSWORD"] = "Repeat the password";
		
		messages["se"]["SEND"] = "Skicka";
		messages["en"]["SEND"] = "Send";
		
		messages["se"]["FORGOT_PASSWORD_TEXT"] = "Fyll i din e-postadress så skickas ditt lösenord till dig.";
		messages["en"]["FORGOT_PASSWORD_TEXT"] = "Fill in the e-mail address you want the password will be sent to.";
		
		messages["se"]["PASSWORD"] = "Lösenord";
		messages["en"]["PASSWORD"] = "Password";
		
		messages["se"]["FORGOT_PASSWORD_Q"] = "Glömt lösenord?";
		messages["en"]["FORGOT_PASSWORD_Q"] = "Forgot password?";

		messages["se"]["LOGIN"] = "Logga in";
		messages["en"]["LOGIN"] = "Log in";
		
		messages["se"]["REGISTER"] = "Registrera";
		messages["en"]["REGISTER"] = "Register";

		messages["se"]["CREATE_ACCOUNT_STEP1"] = "Skapa konto, grunduppgifter";
		messages["en"]["CREATE_ACCOUNT_STEP1"] = "Create account, step 1";
		
		
		messages["se"]["RULES"] = "Köpvillkor";
		messages["en"]["RULES"] = "Rules";
		
		messages["se"]["HOWTO"] = "Så här handlar du";
		messages["en"]["HOWTO"] = "How to shop";
		
		messages["se"]["CONTACT"] = "Kontakt";
		messages["en"]["CONTACT"] = "Contact";
		
		messages["se"]["COOKIES"] = "Cookies";
		messages["en"]["COOKIES"] = "Cookies";
		
		messages["se"]["FAQ"] = "Frågor & svar";
		messages["en"]["FAQ"] = "Questions & answers";
		
		// kontoaktivering
		
		messages["se"]["ACCOUNT_ACTIVATION"] = "Kontoaktivering";
		messages["en"]["ACCOUNT_ACTIVATION"] = "Account activation";
		
		messages["se"]["ACCOUNT_ACTIVATION_SUCCESS"] = "Ditt konto aktiverades, nu kan du <a href=\"/" + $.cookie("lang") + "/login/\">logga in</a>";
		messages["en"]["ACCOUNT_ACTIVATION_SUCCESS"] = "Your account was activated, now you can <a href=\"" + $.cookie("lang") + "/login/\">log in</>";
		
		messages["se"]["ACOUNT_ACTIVATION_FAILED"] = "Ditt konto aktiverades inte, kontrollera länken och e-postadressen"
		messages["en"]["ACOUNT_ACTIVATION_FAILED"] = "Your account was not activated, check the link and email address"
		
		// errors

		messages["se"]["EMAIL_WRONG"] = "E-postadressen verkar inte stämma";
		messages["en"]["EMAIL_WRONG"] = "The e-mail address is not ok";
		
		messages["se"]["PHONE_WRONG"] = "Fyll i telefonnummret, det är bara siffror som gäller här";
		messages["en"]["PHONE_WRONG"] = "Fill in the phone number, only numbers";
		
		messages["se"]["NAME_WRONG"] = "Namnet är felaktigt";
		messages["en"]["NAME_WRONG"] = "The name is wrong";
		
		messages["se"]["PASSWORD_WRONG"] = "Lösenordet verkar inte vara ok";
		messages["en"]["PASSWORD_WRONG"] = "The password is wrong";

		messages["se"]["CITY_WRONG"] = "Fyll i orten";
		messages["en"]["CITY_WRONG"] = "Fill in city";

		messages["se"]["SOCIAL_NUMBER_WRONG"] = "Ditt personnummer verkar inte stämma";
		messages["en"]["SOCIAL_NUMBER_WRONG"] = "Your social number is wrong";

		messages["se"]["ADDRESS_WRONG"] = "Ange en gatuadress som varorna kommer skickas till";
		messages["en"]["ADDRESS_WRONG"] = "Fill in the right address";
		
		messages["se"]["ZIPCODE_WRONG"] = "Postadressen måste innehålla siffror";
		messages["en"]["ZIPCODE_WRONG"] = "Zipcode can only contain numbers";
		
		messages["se"]["WRONG_COUNTRY"] = "Välj ett land som du bor i";
		messages["en"]["WRONG_COUNTRY"] = "Choose the country you are living in";
		
		messages["se"]["PASSWORD_IS_NOT_THE_SAME"] = "Lösenorden stämmer inte riktigt";
		messages["en"]["PASSWORD_IS_NOT_THE_SAME"] = "Passwords is not the same";

		// registreringsfel
		
		messages["se"]["REGISTER_FAIL"] = new Array("E-postadressen används", "Ditt konto skapades inte.<br />Försök att ange annan e-postadress, eller klicka <a href=\"/" + $.cookie("lang") + "/forgot_password/\">här</a> om du har glömt lösenordet.", 1);
		messages["en"]["REGISTER_FAIL"] = new Array("E-mail is already used", "Your accout was not created.<br />Try with another e-mail address", 1);

		// user
		
		messages["se"]["USER_NOT_EXIST"] = new Array("Användaren finns inte", "Användaren existerar inte i vårt system", 1);
		messages["en"]["USER_NOT_EXIST"] = new Array("User does not exist", "The user does not exist in our system", 1);
	
		// tom varukorg
	
		messages["se"]["YOUR_CART_SEEMS_TO_BE_EMPTY"] = new Array("Kundkorg", "Din varukorg verkar vara tom", 1);
		messages["en"]["YOUR_CART_SEEMS_TO_BE_EMPTY"] = new Array("Cart", "Your cart seems to be empty", 1);
		
		// profiluppdatering
		
		messages["se"]["YOUR_PROFILE_WAS_UPDATED"] = new Array("Profil", "Din profil uppdaterades", 0);
		messages["en"]["YOUR_PROFILE_WAS_UPDATED"] = new Array("Profile", "Your profile was updated", 0);
		
		messages["se"]["YOUR_PROFILE_WAS_NOT_UPDATED"] = new Array("Profil", "Din profil uppdaterades inte", 1);
		messages["en"]["YOUR_PROFILE_WAS_NOT_UPDATED"] = new Array("Profile", "Your profile was not updated", 1);

		// Aktivering av konto
		
		messages["se"]["PASSWORD_SENT"] = new Array("Lösenord", "Ditt lösenord skickades till det angivna e-postadressen", 0);
		messages["en"]["PASSWORD_SENT"] = new Array("Password", "Your password was sent to the specified email address", 0);

		// Glömt lösenordet
		
		messages["se"]["FORGOT_PASSWORD"] = new Array("Glömt lösenord", "Glömt lösenordet-text", 1);
		messages["en"]["FORGOT_PASSWORD"] = new Array("Forgot password", "Forgot password-text", 1);
		
		messages["se"]["PASSWORD_SENT"] = new Array("Glömt lösenord", "Lösenord skickades till den angivna e-postadressen", 0);
		messages["en"]["PASSWORD_SENT"] = new Array("Forgot password", "Lösenord skickades till den angivna e-postadressen", 0);
		
		messages["se"]["USER_NOT_ACTIVE"] = new Array("Användaren inte aktiv", "Ditt konto är inte aktiverat, det måste vara det för att du ska kunna logga in", 1);
		messages["en"]["USER_NOT_ACTIVE"] = new Array("User not active", "Your account is not activated", 1);
		
		// användaren kunde inte loggas in
		
		messages["se"]["USER_NOT_LOGGED_IN"] = new Array("Användaren kunde inte loggas in", "Användaren med denna e-postadressen och / eller lösenordet du uppgav är inte registrerad hos oss", 1);
		messages["en"]["USER_NOT_LOGGED_IN"] = new Array("The user could not log in", "User with e-mail address and / or password you provided is not registered in our system", 1);
		
		// felaktig antal flaskor
		
		if($.cookie("too_much") == 1) {
		
			if($.cookie("lang") == "se") {
			
				var b = $.cookie("too_much") + " flaska";
			}
			else {
			
				var b = $.cookie("too_much") + " bottle";
			}
		}
		else {
		
			if($.cookie("lang") == "se") {
			
				var b = $.cookie("too_much") + " flaskor";
			}
			else {
			
				var b = $.cookie("too_much") + " bottles";
			}
		}
		
		$.cookie("too_much", null);
		
		messages["se"]["WRONG_NUMBER_OF_BOTTLES"] = new Array("Felaktigt antal produkter", "Du har " + b + " för mycket.<br />Antalet flaskor måste gå att packa i paket om sex.<br />Dvs 6, 12, 18 osv...", 1);
		messages["en"]["WRONG_NUMBER_OF_BOTTLES"] = new Array("Wrong number of products", "You have " + b + " too much.<br />The number of bottles must ...<br />Ex 6, 12, 18 and so on...", 1);
		
		
		messages["se"]["ORDER_CREATED"] = new Array("Order skapades", "Din order skapades och fick ordernummer: _ORDER_NUMBER_");
		messages["en"]["ORDER_CREATED"] = new Array("Order skapades", "Your order is created and got order number: _ORDER_NUMBER_");
		
		// popup blockerades
		
		messages["se"]["POPUP_BLOCKED"] = new Array("Popup blockerades", "Din webbläsare blockerade denna popup", 1);
		messages["en"]["POPUP_BLOCKED"] = new Array("Popup was blocked", "Your browser blocket this popup", 1);
		
		// registrering ok
		
		messages["se"]["REGISTER_SUCCESS"] = new Array("Registrering lyckades", "Registering lyckades, nu kan du aktivera ditt konto genom att klicka på länken i e-postmeddelandet för logga in och börja handla på Bodegashop.com", 0);
		messages["en"]["REGISTER_SUCCESS"] = new Array("Registration success", "Registration was successful, now you can activate your account clicking on activation link in e-mail message to log in and begin trading on Bodegashop.com", 0);
		
		// registrering inte ok
		
		messages["se"]["REGISTER_NOT_SUCCESS"] = new Array("Registrering lyckades inte", "Din registrering lyckades inte. Försök att registrera dig igen", 1);
		messages["en"]["REGISTER_NOT_SUCCESS"] = new Array("Registration failed", "Your registration failed. Try to register again", 1);
	
		// fyll i formulär
		
		messages["se"]["FILL_IN_FORM"] = new Array("Fyll i formuläret", "Glöm inte att fylla i formuläret", 1);
		messages["en"]["FILL_IN_FORM"] = new Array("Fill in the form", "Do not forget to fill in the form", 1);
	
		// betalning lyckades
		
		messages["se"]["PAYMENT_SUCCESS"] = new Array("Din betalning lyckades", "Din betalning lyckades", 0);
		messages["en"]["PAYMENT_SUCCESS"] = new Array("Payment was OK", "Payment was OK", 0);
	
		// nästa steg - välj fraktsätt
	
		messages["se"]["PAYMNET_OK_CONTINUE"] = new Array("Nästa steg - Välj fraktsätt", "Nästa steg - Välj fraktsätt", 0);
		messages["en"]["PAYMNET_OK_CONTINUE"] = new Array("Next step - Choose shipping", "Next step - Choose shipping", 0);
	
		// ordernummer
		
		messages["se"]["ORDER_NUMBER"] = new Array("Ordernr", "Ordernr", 0);
		messages["en"]["ORDER_NUMBER"] = new Array("Order #", "Order #", 0);
	
		// ett kvitto skickades
		
		//messages["se"]["ORDER_RECEIPT_SENT"] = new Array("Ett kvitto på din betalning har skickats till din e-postadress.", "Ett kvitto på din betalning har skickats till din e-postadress.", 0);
		//messages["en"]["ORDER_RECEIPT_SENT"] = new Array("A receipt for your payment has been sent to your email address.", "A receipt for your payment has been sent to your email address.", 0);
		
		messages["se"]["ORDER_RECEIPT_SENT"] = new Array("En faktura på din beställning har skickats till din uppgivna adress.", "En faktura på din beställning har skickats till din uppgivna adress.", 0);
		messages["en"]["ORDER_RECEIPT_SENT"] = new Array("A receipt for your payment has been sent to your address.", "A receipt for your payment has been sent to your address.", 0);
	
		// lite kvittoinfo
		
		messages["se"]["ORDER_DISCLAIMER"] = new Array("Enligt EU-kommissionen direktiv om privatimport för privatbruk måste du själv ombesörja transport av dina varor från det land inköpet gjorts.", "Enligt EU-kommissionen direktiv om privatimport för privatbruk måste du själv ombesörja transport av dina varor från det land inköpet gjorts.", 0);
		messages["en"]["ORDER_DISCLAIMER"] = new Array("The European Commission directive on personal imports for private use, you need to self arrange transport of your goods from the country of purchase made.", "The European Commission directive on personal imports for private use, you need to self arrange transport of your goods from the country of purchase made.", 0);
	
		// välj frakt
		
		messages["se"]["CHOOSE_SHIPPING"] = new Array("Välj frakt", "Välj frakt", 0);
		messages["en"]["CHOOSE_SHIPPING"] = new Array("Choose shipping", "Choose shipping", 0);
		
		// acceptera villkor
		
		messages["se"]["ACCEPT_TERMS"] = new Array("Acceptera villkoren", "Du måste acceptera <a href=\"#\" onclick=\"text_get('rules'); return false;\">villkoren</a> för att kunna slutföra ditt köp.", 1);
		messages["en"]["ACCEPT_TERMS"] = new Array("Accept rules", "You have to accept <a href=\"#\" onclick=\"text_get('rules'); return false;\">rules</a> before you can continue.", 1);
	
		return messages[$.cookie("lang")][key];
	}
	
	function message_alert(key, klarna) {
	
		if(klarna) {
			
			if(parseInt(key) > 0) {
			
				var m = message_show("PAYMENT_SUCCESS", true);
			
				var html = "";
				
				html += "<div class=\"top\">";
				html += "<img src=\"/img/new/logotype_smaller.png\" alt=\"\" />";
				html += "<span class=\"order_status\">" + message_show("ORDER_NUMBER")[0] + ": <em>" + key + "</em></span>";
				html += "<div class=\"clear\"></div>";
				html += "</div>";
				html += "<div class=\"bottom\">";
				html += "<p>";
				html += "<b>" + message_show("ORDER_RECEIPT_SENT")[0] + "</b>";
				html += "<br /><br />";
				html += message_show("ORDER_DISCLAIMER")[0];
				html += "</p>";
				html += "<input type=\"button\" onclick=\"order_send_away2(" + key + "); return false;\" value=\"" + message_show("CHOOSE_SHIPPING")[0] + "\" />";
				html += "<div class=\"clear\"></div>";
				html += "</div>";
			
				$.prompt(html, {prefix: "klarna", title : m[0] , width: 511, closer: 1, error : 0, text : 0});
			}
			else {
			
				$.prompt(key, {prefix: "klarna", title : "Klarna", width: 511, closer: 1, error : 1, text : 0});
			}
		}
		else {
		
			var m = message_show(key);
	
			$.prompt(m[1], {prefix: "message_class", title: m[0], width: 511, closer: 1, error : m[2], text : 0});
		}
	}

/* ORDER */

var last_order_id = 0;


	function order_get_last_order_id() {
	
		var orderId = false;
		
		jQuery.ajax({

				url : "/inc/modules/ajax/get_last_order_id.php",
				cache : false,
				async : false,
				dataType : "json",
				data : {ajax : "true"},

				type : "POST",
				beforeSend : function(xhr) {},
			
				error: function(xhr){},
			
				success: function(json) {
	
					if(json.status) {
		
						orderId = parseInt(json.order_id) + 1;
					}
				}
			});
		
		last_order_id = orderId;
			
		return orderId;
	
	}

	function order_use_locadi(order_id) {

		jQuery.ajax({

					url : "/inc/modules/ajax/use_locadi.php",
					cache : false,
					async : false,
					dataType : "json",
					data : {ajax : "true", order_id : order_id},

					type : "POST",
					beforeSend : function(xhr) {},

					error: function(xhr){},

					success: function(json) {}
				});


	}

	function order_use_transaver(order_id) {

		jQuery.ajax({

					url : "/inc/modules/ajax/use_transaver.php",
					cache : false,
					async : false,
					dataType : "json",
					data : {ajax : "true", order_id : order_id},

					type : "POST",
					beforeSend : function(xhr) {},

					error: function(xhr){},

					success: function(json) {}
				});


	}

	function order_get_user_information() {
	
		var user_info = null;
	
		jQuery.ajax({

				url : "/inc/modules/ajax/get_user_information.php",
				cache : false,
				async : false,
				dataType : "json",
				data : {ajax : "true"},

				type : "POST",
				beforeSend : function(xhr) {},
			
				error: function(xhr){},
			
				success: function(json) {
			
					if(json) {

						user_info = json;
					}
					else {
					
						return false;
					}
				}
			});	
			
			return user_info;
	}

	function order_pay_bill() {
	
		if($("#klarna_accept:checked").val() == null) {
		
			message_alert("ACCEPT_TERMS", false);
			return false;
		}	
	
		if(user_validate("pay_invoice")) {
	
			order_create_invoice_via_klarna();
		}
	
	}

	function order_create_invoice_via_klarna() {
	
		var user_info = order_get_user_information();
		
		//if(user_validate("pay_bill")) {
		
			jQuery.ajax({
		
				url : "/lib/klarna/add_transaction.php",
				cache : false,
				dataType : "json",
				data : {ajax : "true", 
					   email : $("#email_address").val(), 
					   estore_order_no : parseInt(order_get_last_order_id()),
					   estore_user : parseInt(user_info.customer_id),
					   fname : escape($("#name").val()), 
					   lname : escape($("#surname").val()),
					   pno : $("#social_number").val(),
					   language : "swedish",
					   shipmentfee : 0,
					   telno : $("#phone_number").val(),
					   cellno : $("#phone_number").val(),
					   city : escape($("#city").val().toLowerCase()),
					   street : escape($("#street_address").val().toLowerCase()),
					   postno : $("#zip_code").val(),
					   country : escape($("#country").val().toLowerCase()),
					   currency : "sek"},
					   
				type : "GET",
				beforeSend : function(xhr) {},
			
				error: function(xhr){},
			
				success: function(json) {
			
					if(json.status == 0 && json.message > 0) {
						
						order_pay_invoice(json.message);
					}
					else {
						
						
						if(json.status == 5) {
						
							message_alert("Just nu har vi vissa problem med anslutningen till Klarna.<br /><br />St&auml;ng denna ruta och tryck p&aring; <b>Fakturera mig</b> igen.<br />Om detta fel uppst&aring;r igen ber vi dig kontakta oss p&aring; info@bodegashop.com.", true);	
						}
						else {
						
							message_alert(json.message, true);
						}
						

					}
				}
			});	
		//}
		
	}

	function order_pay_with_card(src, address) {
	
		var iWidth = 850;
		var iHeight = 600;
		var iTop = 300;
		var iLeft = 300;
		
		win = window.open(address,'CVCInfo','toolbar=no,location=no,directories=no,status=no,width='+iWidth+',height='+iHeight+',resize=yes,scrollbars=yes,top='+iTop+',left='+iLeft);
		
		if (!win) {
		
			message_alert("POPUP_BLOCKED", false);
			
		} 
		else {
		
			setTimeout("order_send_away();", 15000);
		}
	}
	
	function order_send_away2(orderId) {
	
		window.location = "/" + $.cookie("lang") + "/shipping?payed=yes&orderId=" + orderId;
	}
	
	function order_send_away() {
	
		//if($.cookie("order_payed") && $.cookie("order_payed") == 1) {
		
			// tar bort cookien
		//	$.cookie("order_payed", null);
			//window.location = "/" + $.cookie("lang") + "/shipping";
		//}
		//else {
		
			$.cookie("basket", null);
			window.location = "/?payed=ok";
		//}
	
	}

	function order_pay_invoice(order_id) {
	
	//	if(user_validate("pay_bill")) {
		
			jQuery.ajax({
		
				url : "/inc/modules/ajax/pay_invoice.php",
				cache : false,
				dataType : "json",
				data : {ajax : "true", 
					   email : $("#email_address").val(), 
					   firstname : $("#name").val(), 
					   surname : $("#surname").val(),
					   social_number : $("#social_number").val(),
					   phone_number : $("#phone_number").val(),
					   co_address : $("#co_address").val(),
					   city : $("#city").val(),
					   street_address : $("#street_address").val(),
					   zip_code : $("#zip_code").val(),
					   country : $("#country").val(),
					   klarna_order_id : order_id},

				type : "POST",
				beforeSend : function(xhr) {},
			
				error: function(xhr){},
			
				success: function(json) {
			
					if(json.status) {
				
						message_alert(last_order_id, true);
					}
					else {
					
						if($.cookie("basket")) {
						
							message_alert(json.message, true);
						}
						else {
						
							message_alert(json.message, false);
						}
					}
				}
			});	
	//	}
	}

/* TEXT */

	function text_get(resource) {
	
		var text_to_get = "";
		var title = "";
	
		if(resource == "category/sitemap" || resource == "sitemap") {
		
			window.location = "/" + $.cookie("lang") + "/sitemap";
			return true;
		}
	
		if(resource == "category/rules" || resource =="rules") {
		
			text_to_get = "about/rules.text";
			title = message_show("RULES", false);
			
		}

		if(resource == "category/shipping") {

		    text_to_get = "category/shipping";
		    title = message_show("SHIPPING", false);
		}

		if(resource == "category/howto" || resource == "howto") {
		
			text_to_get = "about/howto.text";
			title = message_show("HOWTO", false);
		}
		
		if(resource == "category/contact" || resource == "contact") {
		
			text_to_get = "about/contact.text";
			title = message_show("CONTACT", false);
		}
		
		if(resource == "category/qa" || resource == "qa") {
		
			text_to_get = "about/qa.text";
			title = message_show("FAQ", false);
		}
		
		if(resource == "category/about.cookies" || resource == "about.cookies") {
		
			text_to_get = "about/cookies.text";
			title = message_show("COOKIES", false);
		}
		
		jQuery.ajax({
		
				url : "/inc/modules/ajax/get_text.php",
				cache : false,
				dataType : "json",
				data : {ajax : "true", 
				resource : text_to_get},
				type : "POST",
				beforeSend : function(xhr) {},
			
				error: function(xhr){},
			
				success: function(json) {
			
					if(json.status && json.message != false) {
				
						var m = json.message.replace(/\\/gi, "");
				
						$.prompt(m, {title: title, width: 680, closer: 1, error: 0, text : 1});
					}
				}
			});
	}

/* USER */

	go_to_url : "",

	function user_go_to(where) {
	
		window.location = "/" + $.cookie("lang") + "/" + where;
	}

	function open_mk_top() {
		var m = '<center><h1 style="text-align: center; width: 100%;">Exklusiva rabatt på utvalda varor</h1><br /><img src="/img/mklogo.jpg" alt="" /><br /><br /><p>På Bodegan hittar ni viner som passar till alla tänkbara maträtter.</p></center>';
		var title = 'Erbjudande till medlemmar på Matklubben.se';
		$.prompt(m, {title: title, width: 680, closer: 1, error: 0, text : 1});
	}

	function user_change_language(lang) {
	
		var cookie_options = {path: "/", expires: 30};
	
		if(lang == "se" || lang == "en") {
		
			$.cookie("lang", lang, cookie_options);
			
			window.location = "/" + lang;
		}		
	}

	function user_forgot_password() {
	
		var html = "";
		
		$(document).ready(function() {
		
			html += "<form method=\"post\" action=\"\" id=\"forgot_password_form\">";
			html += "<div>";
			html += "<p>" + message_show("FORGOT_PASSWORD_TEXT", false) + "</p>";
			html += "<label for=\"email_address\">" + message_show("EMAIL", false) + "</label>";
			html += "<input type=\"text\" name=\"email_address\" id=\"email_address\" class=\"text_input\" />";
			html += "<input type=\"submit\" name=\"send_forgotten_password\" id=\"send_forgotten_password\" value=\"" + message_show("SEND", false) + "\" onclick=\"user_give_me_back_my_password(); return false;\" />";
			html += "</div>";
			html += "</form>";
			
			$.prompt(html, {prefix : "forgot_password", title: message_show("FORGOT_PASSWORD", false)[0], width: 680, closer: 1, error: 0, text : 0});
		});
	}
	
	function user_give_me_back_my_password() {
	
		if(user_validate("forgot_password")) {
	
			jQuery.ajax({
		
				url : "/inc/modules/ajax/forgot_password.php",
				cache : false,
				dataType : "json",
				data : {ajax : "true", email : $("#email_address").val()},
				type : "POST",
				beforeSend : function(xhr) {},
			
				error: function(xhr){},
			
				success: function(json) {
			
					if(json.status) {
				
						message_alert(json.message, false);
					}
					else {
				
						message_alert(json.message, false);
					}
				}
			});
		}
	}

	function user_login(from) {
		
		if(from == "menu") {
		
			user_go_to_url = "/" + $.cookie("lang") + "/my_profile";
		}
		else {
		
			user_go_to_url = "/" + $.cookie("lang") + "/payment";
		}
	
		var html = "";
		
		html += "<div class=\"login\">";
		html += "<form method=\"post\" action=\"\">";
		html += "<div class=\"left\">";
		html += "<label for=\"email_login\">";
		html += message_show("EMAIL", false) + ":";
		html += "</label>";
		html += "<input type=\"text\" name=\"email_login\" id=\"email_login\" class=\"text_input\" />";
		html += "</div>";
		html += "<div class=\"right\">";
		html += "<label for=\"password_login\">";
		html += message_show("PASSWORD", false) + ":";
		html += "</label>";
		html += "<input type=\"password\" name=\"password_login\" id=\"password_login\" class=\"text_input\" />";
		html += "</div>";
		html += "<div class=\"clear\"></div>";
		html += "<div class=\"left forgot_password\">";
		html += "<a href=\"/" + $.cookie("lang") + "/forgot_password\">" + message_show("FORGOT_PASSWORD_Q", false) + "</a>";
		html += "</div>";
		html += "<div class=\"right button\">";
		html += "<input type=\"submit\" name=\"login_button\" id=\"login_button\" value=\"" + message_show("LOGIN", false) +  "\" onclick=\"user_let_me_in(); return false;\">";
		html += "</div>";
		html += "<div class=\"clear\"></div>";
		html += "</form>";
		html += "</div>";
		
		// register boxen
		
		html += "<div class=\"register\">";
		html += "<h1>" + message_show("CREATE_ACCOUNT_STEP1", false) + "</h1>";
		html += "<form method=\"post\" action=\"/" + $.cookie("lang") + "/continue_register\">";
		html += "<label for=\"email_register\">";
		html += message_show("EMAIL", false) + ":";
		html += "</label>";
		html += "<input type=\"text\" name=\"email_register\" id=\"email_register\" class=\"text_input\" />";
		html += "<div class=\"left\">";
		html += "<label for=\"name_register\">";
		html += message_show("NAME", false) + ":";
		html += "</label>";
		html += "<input type=\"text\" name=\"name_register\" id=\"name_register\" class=\"text_input\" />";
		html += "</div>";
		html += "<div class=\"right\">";
		html += "<label for=\"surname_register\">";
		html += message_show("SURNAME", false) + ":";
		html += "</label>";
		html += "<input type=\"text\" name=\"surname_register\" id=\"surname_register\" class=\"text_input\" />";
		html += "</div>";
		html += "<div class=\"clear\"></div>";
		html += "<div class=\"left\">";
		html += "<label for=\"password_register\">";
		html += message_show("CHOOSE_PASSWORD", false) + ":";
		html += "</label>";
		html += "<input type=\"password\" name=\"password_register\" id=\"password_register\" class=\"text_input\" />";
		html += "</div>";
		html += "<div class=\"right\">"
		html += "<label for=\"repeat_password_register\">";
		html += message_show("REPEAT_PASSWORD", false) + ":";
		html += "</label>";
		html += "<input type=\"password\" name=\"repeat_password_register\" id=\"repeat_password_register\" class=\"text_input\" />";
		html += "</div>";
		html += "<div class=\"clear\"></div>";
		html += "<div class=\"button\">";
		html += "<input type=\"submit\" name=\"register_button\" id=\"register_button\" value=\"" + message_show("CONTINUE", false) + "\" />";
		html += "</div>";
		html += "</form>";
		html += "</div>";
	
		jQuery.ajax({
		
			url : "/inc/modules/ajax/get_status.php",
			cache : false,
			dataType : "json",
			data : {ajax : "true"},
			type : "POST",
			beforeSend : function(xhr) {},
			
			error: function(xhr){},
			
			success: function(json) {
			
				if(json.status) {
				
					window.location = user_go_to_url;
				}
				else {
				
					$.prompt(html, {prefix: "login", title: message_show("LOGIN", false) + " / " + message_show("REGISTER", false), width: 680, closer: 1, error: 0, text: 0});
				}
			}
		});
	}
	
	function user_activation(status) {
	
		var html = "";
	
		$(document).ready(function() {
		
			if(status == "ok") {
		
				html += "<div>";
				html += "<p>";
				html += message_show("ACCOUNT_ACTIVATION_SUCCESS", false);
				html += "</p>";
				html += "</div>";
		
			}
			else {
		
				html += "<div>";
				html += "<p>";
				html += message_show("ACCOUNT_ACTIVATION_FAILD", false);
				html += "</p>";
				html += "</div>";		
			}
		
			$.prompt(html, {prefix: "account_activation", title: message_show("ACCOUNT_ACTIVATION", false), width: 680, closer: 1, error: 0, text: 0});
		
		
		});
		
	}
	
	function user_let_me_in(from) {
	
		if(user_validate("login")) {
		
			jQuery.ajax({
		
				url : "/inc/modules/ajax/login.php",
				cache : false,
				dataType : "json",
				data : {ajax : "true",
					  email_login : $("#email_login").val(),
					  password_login : $("#password_login").val()},
				type : "POST",
			
				error: function(xhr){},
			
				success: function(json) {
			
					if(json.status) {
				
						window.location = user_go_to_url;
					}
					else {
				
						message_alert(json.message, false);
					}
				}
			});
		}
	}
	
	function user_logout() {
	
		jQuery.ajax({
		
			url : "/inc/modules/ajax/logout.php",
			cache : false,
			dataType : "json",
			data : {ajax : "true"},
			type : "POST",
			beforeSend : function(xhr) {},
			
			error: function(xhr){},
			
			success: function(json) {
			
				if(json.status) {
			
					window.location = "/";
				}
			}
		});
	}
	
	function user_update() {
	
		// validering
	
		if(user_validate("profile")) {
		
			jQuery.ajax({
		
				url : "/inc/modules/ajax/update_profile.php",
				cache : false,
				dataType : "json",
				data : {ajax : "true", 
					   email : $("#email_address").val(), 
					   firstname : $("#name").val(), 
					   surname : $("#surname").val(),
					   social_number : $("#social_number").val(),
					   password : $("#password").val(),
					   repeated_password : $("#repeated_password").val(),
					   social_number : $("#social_number").val(),
					   phone_number : $("#phone_number").val(),
					   co_address : $("#co_address").val(),
					   city : $("#city").val(),
					   street_address : $("#street_address").val(),
					   zip_code : $("#zip_code").val(),
					   country : $("#country").val()},

				type : "POST",
				beforeSend : function(xhr) {},
			
				error: function(xhr){},
			
				success: function(json) {
			
					if(json.status) {
				
						message_alert("YOUR_PROFILE_WAS_UPDATED", false);
					}
					else {
				
						message_alert("YOUR_PROFILE_WAS_NOT_UPDATED", false);
					}
				}
			});
			
		}
	}
	
	function user_register() {
	
		if(user_validate("register")) {
		
			jQuery.ajax({
		
				url : "/inc/modules/ajax/register.php",
				cache : false,
				dataType : "json",
				data : {ajax : "true", 
					   email : $("#email_address").val(), 
					   firstname : $("#name").val(), 
					   surname : $("#surname").val(),
					   password : $("#password").val(),
					   social_number : $("#social_number").val(),
					   phone_number : $("#phone_number").val(),
					   co_address : $("#co_address").val(),
					   city : $("#city").val(),
					   street_address : $("#street_address").val(),
					   zip_code : $("#zip_code").val(),
					   country : $("#country").val()},

				type : "POST",
				beforeSend : function(xhr) {},
			
				error: function(xhr){},
			
				success: function(json) {
			
					if(json.status) {
				
						message_alert("REGISTER_SUCCESS", false);
					}
					else {
				
						message_alert("REGISTER_FAIL", false);
					}
				}
			});
		}	
	}
	
	function user_validate(caller) {
	
		// "flaggan" sätts om hela tiden vid validering, till slut skall den vara true om det skall vara OK
				
		var flag = null;
		
		// patterns
		
		var default_pattern = /^([ \u00c0-\u01ffa-zA-Z\-\.])+$/;
		var email_pattern = /[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;
		var social_number_pattern = /[0-9]{6,8}(-?[0-9]{4})?$/;
		var default_number_pattern = /[0-9\-]+$/;
		
		// grupper av fält
		
		var fields = new Array();
		
		fields["login"] = new Array("email_login");
		fields["register"] = new Array("email_address", "name", "surname", "social_number", "phone_number", "street_address", "zip_code", "city", "country", "password", "repeated_password");
		fields["profile"] = new Array("email_address", "name", "surname", "social_number", "phone_number", "street_address", "zip_code", "city", "country", "password", "repeated_password");
		fields["forgot_password"] = new Array("email_address");
		fields["pay_invoice"] = new Array("email_address", "name", "surname", "social_number", "phone_number", "street_address", "zip_code", "city", "country");
		
		// kollar över alla formulärfält
		
		$(".text_input").each(function(x) {
		
			for(var i = 0; i < fields[caller].length; i++) {
			
				if($(this).attr("id") == fields[caller][i])	{
				
					// om inte tom
				
					if($(this).val() != "") {
				
						// om detta är namnet, eller efternamnet
				
						if($(this).attr("id") == "name" || $(this).attr("id") == "surname") {
					
							if(!default_pattern.test($(this).val())) {
								
								flag = false;
							
								return user_mark_field($(this));
							}
							else {
							
								flag = true;
							}
						}
						
						if($(this).attr("id") == "country") {
						
							if($(this).val() == "- Unknown -") {
							
								flag = false;
								
								return user_mark_field($(this));
							}
							else {
							
								flag = true;
							}
						}
						
						// om email
						
						if($(this).attr("id") == "email_address" || $(this).attr("id") == "email_login") {
						
							if(!email_pattern.test($(this).val())) {
							
								flag = false;
								
								return user_mark_field($(this));
							}
							else {
							
								flag = true;
							}
						}
						
						// om postnummer, eller telefonnummer
						
						if($(this).attr("id") == "phone_number" || $(this).attr("id") == "zip_code") {
						
							if(!default_number_pattern.test($(this).val())) {
							
								flag = false;
							
								return user_mark_field($(this));
							}
							else {
							
								flag = true;
							}
						}
						
						// om personnummret
						
						if($(this).attr("id") == "social_number") {
						
							if(!social_number_pattern.test($(this).val())) {
							
								flag = false;
							
								return user_mark_field($(this));
							}
							else {
							
								flag = true;
							}
						}
						
						// om lösenorden inte stämmer
						
						if($(this).attr("id") == "repeated_password") {
						
							if($(this).val() != $("#password").val()) {
								
								flag = false;
							
								return user_mark_field($(this));
							}
							else {
							
								flag = true;
							}
						}
					}
					else {
			
						flag = false;
			
						return user_mark_field($(this));
					}
				}
			}
		
		});
		
		return flag;
	}
	
	function user_mark_field(element) {
	
		// CSS'ar inputfältet
	
		$(element).css({"border" : "1px solid red"});
					
		$(element).focus();
		
		user_show_message(element);
		
		return false;
	}
	
	function user_clear_fields_from_errors() {
	
		$(".error").remove();
		
	}
	
	function user_show_message(element) {
	
		var messages = new Array();
		
		messages["email_address"] = message_show("EMAIL_WRONG", false);
		messages["email_login"] = message_show("EMAIL_WRONG", false);
		messages["phone_number"] = message_show("PHONE_WRONG", false);
		messages["name"] = message_show("NAME_WRONG", false);
		messages["city"] = message_show("CITY_WRONG", false);
		messages["password"] = message_show("PASSWORD_WRONG", false);
		messages["social_number"] = message_show("SOCIAL_NUMBER_WRONG", false);
		messages["street_address"] = message_show("ADDRESS_WRONG", false);
		messages["zip_code"] = message_show("ZIPCODE_WRONG", false);
		messages["country"] = message_show("WRONG_COUNTRY", false);
		messages["repeated_password"] = message_show("PASSWORD_IS_NOT_THE_SAME", false);
	
		var left = 0;
		var top = 0;
	
		if($(element).offsetParent()) {
	
			left += $(element).offset().left;
			top += $(element).offset().top;
		}
		
			if($("#error_message").length == 0) {
		
				$("body").append($("<div>").attr({"id" : "error_message", "class" : "error"}).html("<span>" + messages[$(element).attr("id")] + "</span>").css({"position" : "absolute", "top" : top - 60  + "px", "left" : left + 50 + "px"}));
				$("#error_message").append($("<div>").attr({"id" : "error_message_close"}).append($("<img>").attr({"src" : "/img/new/close.gif", "alt" : ""}).click(function(){user_close_message();}).css({"position" : "absolute", "top" : "-5px", "left" : $("#error_message").width() + 5 + "px"})));
				
			}
		
	}
	
	function user_close_message() {
	
		if($("#error_message").length > 0) {
		
			$("#error_message").remove();
			
			$(".text_input").css({"border" : "1px solid #583829"});
		}
	}



checkIE = function(version) {

	if($.browser.msie && parseInt(jQuery.browser.version, 10) == version) {

		return true;
	
	}
	else {

		return false;	
	}
}

/* START UPS */

$(document).ready(function(){


	$(".text_input").each(function(i) {
				
		$(this).click(function(){

			user_close_message();
		
		});
	});
	
	if($("#search").length > 0) {
	
		var default_search_text = new Array();
		
		default_search_text["se"] = "Sökord, dryck, varumärke...";
		default_search_text["en"] = "Keyword, beverage, brand...";
	
		$("#search").val(default_search_text[$.cookie("lang")]);
		
		$("#search").click(function(){
		
			$("#search").val("");
		});
		
		$("#search").blur(function(){
		
			if($("#search").val() == "") {
			
				$("#search").val(default_search_text[$.cookie("lang")]);
			}
		});
	}
	
	
	$(".accordion").hrzAccordion({containerClass : "accordion_slider",
							listItemClass : "listItem",
							contentWrapper	: "contentWrapper",
							contentInnerWrapper	: "contentInnerWrapper",
							handleClass : "handle",
							openOnLoad : "1",
							handleClassOver : "handleOver",
							handleClassSelected	: "handleSelected",
							fixedWidth : "360"
				 });

	// "initierar" varukorgen
	
	cart_init(false);
	
	// om bill_payment-boxen finns, göm den, för att sedan visa den vid knapptryckning
				
	if($(".bill_payment").length > 0) {
	
		$(".bill_payment").hide();
	}
	
	// om another_shipping-boxen finns, göm den.
	
	if($(".another_shipping").length > 0) {
	
		$(".another_shipping").hide();
	}

});

