Changeset 2058

Show
Ignore:
Timestamp:
06/23/09 10:05:31 (9 months ago)
Author:
JensDiemer
Message:


Location:
branches/0.9/pylucid_project
Files:
42 added
3 modified

Legend:

Unmodified
Added
Removed
  • branches/0.9/pylucid_project/apps/pylucid/context_processors.py

    r2035 r2058  
    5555        "sites": all_sites, 
    5656         
    57         "PyLucid_media_url": settings.MEDIA_URL + settings.PYLUCID.PYLUCID_MEDIA_DIR + "/",        
     57        "PyLucid_media_url": settings.MEDIA_URL + settings.PYLUCID.PYLUCID_MEDIA_DIR + "/", 
     58         
     59        "debug": settings.DEBUG, 
    5860    } 
    5961     
  • branches/0.9/pylucid_project/apps/pylucid/templates/admin/base_site.html

    r2047 r2058  
    77<!-- app_extrahead block start --> 
    88{# stylesheets for all PyLucid views #} 
    9 <script type="text/javascript" src="{{ PyLucid_media_url }}jquery.js"></script> 
     9<script type="text/javascript" src="{{ PyLucid_media_url }}jquery.js" onerror="JavaScript:alert('Error loading file [{{ PyLucid_media_url }}jquery.js] !');" ></script> 
     10<script type="text/javascript" src="{{ PyLucid_media_url }}pylucid_js_tools.js"></script> 
     11{% if debug %} 
     12    <script type="text/javascript">var debug=true;log("debug is on");</script> 
     13{% else %} 
     14    <script type="text/javascript">var debug=false;</script> 
     15{% endif %} 
    1016<link rel="stylesheet" type="text/css" media="screen" href="{{ PyLucid_media_url }}superfish/superfish.css" /> 
    1117<link rel="stylesheet" type="text/css" media="screen" href="{{ PyLucid_media_url }}superfish/admin_design.css" /> 
     
    3642      delay:       1000,                            // one second delay on mouseout  
    3743      animation:   {opacity:'show',height:'show'},  // fade-in and slide-down animation  
    38       speed:       'fast',                          // faster animation speed 
     44      speed:       'fast'                           // faster animation speed 
    3945  });  
    4046 
  • branches/0.9/pylucid_project/media/PyLucid/jquery.js

    r2022 r2058  
    1 /* 
     1/*! 
    22 * jQuery JavaScript Library v1.3.2 
    33 * http://jquery.com/ 
     
    1010 * Revision: 6246 
    1111 */ 
    12 (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)})}}); 
    13 /* 
     12(function(){ 
     13 
     14var 
     15        // Will speed up references to window, and allows munging its name. 
     16        window = this, 
     17        // Will speed up references to undefined, and allows munging its name. 
     18        undefined, 
     19        // Map over jQuery in case of overwrite 
     20        _jQuery = window.jQuery, 
     21        // Map over the $ in case of overwrite 
     22        _$ = window.$, 
     23 
     24        jQuery = window.jQuery = window.$ = function( selector, context ) { 
     25                // The jQuery object is actually just the init constructor 'enhanced' 
     26                return new jQuery.fn.init( selector, context ); 
     27        }, 
     28 
     29        // A simple way to check for HTML strings or ID strings 
     30        // (both of which we optimize for) 
     31        quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/, 
     32        // Is it a simple selector 
     33        isSimple = /^.[^:#\[\.,]*$/; 
     34 
     35jQuery.fn = jQuery.prototype = { 
     36        init: function( selector, context ) { 
     37                // Make sure that a selection was provided 
     38                selector = selector || document; 
     39 
     40                // Handle $(DOMElement) 
     41                if ( selector.nodeType ) { 
     42                        this[0] = selector; 
     43                        this.length = 1; 
     44                        this.context = selector; 
     45                        return this; 
     46                } 
     47                // Handle HTML strings 
     48                if ( typeof selector === "string" ) { 
     49                        // Are we dealing with HTML string or an ID? 
     50                        var match = quickExpr.exec( selector ); 
     51 
     52                        // Verify a match, and that no context was specified for #id 
     53                        if ( match && (match[1] || !context) ) { 
     54 
     55                                // HANDLE: $(html) -> $(array) 
     56                                if ( match[1] ) 
     57                                        selector = jQuery.clean( [ match[1] ], context ); 
     58 
     59                                // HANDLE: $("#id") 
     60                                else { 
     61                                        var elem = document.getElementById( match[3] ); 
     62 
     63                                        // Handle the case where IE and Opera return items 
     64                                        // by name instead of ID 
     65                                        if ( elem && elem.id != match[3] ) 
     66                                                return jQuery().find( selector ); 
     67 
     68                                        // Otherwise, we inject the element directly into the jQuery object 
     69                                        var ret = jQuery( elem || [] ); 
     70                                        ret.context = document; 
     71                                        ret.selector = selector; 
     72                                        return ret; 
     73                                } 
     74 
     75                        // HANDLE: $(expr, [context]) 
     76                        // (which is just equivalent to: $(content).find(expr) 
     77                        } else 
     78                                return jQuery( context ).find( selector ); 
     79 
     80                // HANDLE: $(function) 
     81                // Shortcut for document ready 
     82                } else if ( jQuery.isFunction( selector ) ) 
     83                        return jQuery( document ).ready( selector ); 
     84 
     85                // Make sure that old selector state is passed along 
     86                if ( selector.selector && selector.context ) { 
     87                        this.selector = selector.selector; 
     88                        this.context = selector.context; 
     89                } 
     90 
     91                return this.setArray(jQuery.isArray( selector ) ? 
     92                        selector : 
     93                        jQuery.makeArray(selector)); 
     94        }, 
     95 
     96        // Start with an empty selector 
     97        selector: "", 
     98 
     99        // The current version of jQuery being used 
     100        jquery: "1.3.2", 
     101 
     102        // The number of elements contained in the matched element set 
     103        size: function() { 
     104                return this.length; 
     105        }, 
     106 
     107        // Get the Nth element in the matched element set OR 
     108        // Get the whole matched element set as a clean array 
     109        get: function( num ) { 
     110                return num === undefined ? 
     111 
     112                        // Return a 'clean' array 
     113                        Array.prototype.slice.call( this ) : 
     114 
     115                        // Return just the object 
     116                        this[ num ]; 
     117        }, 
     118 
     119        // Take an array of elements and push it onto the stack 
     120        // (returning the new matched element set) 
     121        pushStack: function( elems, name, selector ) { 
     122                // Build a new jQuery matched element set 
     123                var ret = jQuery( elems ); 
     124 
     125                // Add the old object onto the stack (as a reference) 
     126                ret.prevObject = this; 
     127 
     128                ret.context = this.context; 
     129 
     130                if ( name === "find" ) 
     131                        ret.selector = this.selector + (this.selector ? " " : "") + selector; 
     132                else if ( name ) 
     133                        ret.selector = this.selector + "." + name + "(" + selector + ")"; 
     134 
     135                // Return the newly-formed element set 
     136                return ret; 
     137        }, 
     138 
     139        // Force the current matched set of elements to become 
     140        // the specified array of elements (destroying the stack in the process) 
     141        // You should use pushStack() in order to do this, but maintain the stack 
     142        setArray: function( elems ) { 
     143                // Resetting the length to 0, then using the native Array push 
     144                // is a super-fast way to populate an object with array-like properties 
     145                this.length = 0; 
     146                Array.prototype.push.apply( this, elems ); 
     147 
     148                return this; 
     149        }, 
     150 
     151        // Execute a callback for every element in the matched set. 
     152        // (You can seed the arguments with an array of args, but this is 
     153        // only used internally.) 
     154        each: function( callback, args ) { 
     155                return jQuery.each( this, callback, args ); 
     156        }, 
     157 
     158        // Determine the position of an element within 
     159        // the matched set of elements 
     160        index: function( elem ) { 
     161                // Locate the position of the desired element 
     162                return jQuery.inArray( 
     163                        // If it receives a jQuery object, the first element is used 
     164                        elem && elem.jquery ? elem[0] : elem 
     165                , this ); 
     166        }, 
     167 
     168        attr: function( name, value, type ) { 
     169                var options = name; 
     170 
     171                // Look for the case where we're accessing a style value 
     172                if ( typeof name === "string" ) 
     173                        if ( value === undefined ) 
     174                                return this[0] && jQuery[ type || "attr" ]( this[0], name ); 
     175 
     176                        else { 
     177                                options = {}; 
     178                                options[ name ] = value; 
     179                        } 
     180 
     181                // Check to see if we're setting style values 
     182                return this.each(function(i){ 
     183                        // Set all the styles 
     184                        for ( name in options ) 
     185                                jQuery.attr( 
     186                                        type ? 
     187                                                this.style : 
     188                                                this, 
     189                                        name, jQuery.prop( this, options[ name ], type, i, name ) 
     190                                ); 
     191                }); 
     192        }, 
     193 
     194        css: function( key, value ) { 
     195                // ignore negative width and height values 
     196                if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 ) 
     197                        value = undefined; 
     198                return this.attr( key, value, "curCSS" ); 
     199        }, 
     200 
     201        text: function( text ) { 
     202                if ( typeof text !== "object" && text != null ) 
     203                        return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); 
     204 
     205                var ret = ""; 
     206 
     207                jQuery.each( text || this, function(){ 
     208                        jQuery.each( this.childNodes, function(){ 
     209                                if ( this.nodeType != 8 ) 
     210                                        ret += this.nodeType != 1 ? 
     211                                                this.nodeValue : 
     212                                                jQuery.fn.text( [ this ] ); 
     213                        }); 
     214                }); 
     215 
     216                return ret; 
     217        }, 
     218 
     219        wrapAll: function( html ) { 
     220                if ( this[0] ) { 
     221                        // The elements to wrap the target around 
     222                        var wrap = jQuery( html, this[0].ownerDocument ).clone(); 
     223 
     224                        if ( this[0].parentNode ) 
     225                                wrap.insertBefore( this[0] ); 
     226 
     227                        wrap.map(function(){ 
     228                                var elem = this; 
     229 
     230                                while ( elem.firstChild ) 
     231                                        elem = elem.firstChild; 
     232 
     233                                return elem; 
     234                        }).append(this); 
     235                } 
     236 
     237                return this; 
     238        }, 
     239 
     240        wrapInner: function( html ) { 
     241                return this.each(function(){ 
     242                        jQuery( this ).contents().wrapAll( html ); 
     243                }); 
     244        }, 
     245 
     246        wrap: function( html ) { 
     247                return this.each(function(){ 
     248                        jQuery( this ).wrapAll( html ); 
     249                }); 
     250        }, 
     251 
     252        append: function() { 
     253                return this.domManip(arguments, true, function(elem){ 
     254                        if (this.nodeType == 1) 
     255                                this.appendChild( elem ); 
     256                }); 
     257        }, 
     258 
     259        prepend: function() { 
     260                return this.domManip(arguments, true, function(elem){ 
     261                        if (this.nodeType == 1) 
     262                                this.insertBefore( elem, this.firstChild ); 
     263                }); 
     264        }, 
     265 
     266        before: function() { 
     267                return this.domManip(arguments, false, function(elem){ 
     268                        this.parentNode.insertBefore( elem, this ); 
     269                }); 
     270        }, 
     271 
     272        after: function() { 
     273                return this.domManip(arguments, false, function(elem){ 
     274                        this.parentNode.insertBefore( elem, this.nextSibling ); 
     275                }); 
     276        }, 
     277 
     278        end: function() { 
     279                return this.prevObject || jQuery( [] ); 
     280        }, 
     281 
     282        // For internal use only. 
     283        // Behaves like an Array's method, not like a jQuery method. 
     284        push: [].push, 
     285        sort: [].sort, 
     286        splice: [].splice, 
     287 
     288        find: function( selector ) { 
     289                if ( this.length === 1 ) { 
     290                        var ret = this.pushStack( [], "find", selector ); 
     291                        ret.length = 0; 
     292                        jQuery.find( selector, this[0], ret ); 
     293                        return ret; 
     294                } else { 
     295                        return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){ 
     296                                return jQuery.find( selector, elem ); 
     297                        })), "find", selector ); 
     298                } 
     299        }, 
     300 
     301        clone: function( events ) { 
     302                // Do the clone 
     303                var ret = this.map(function(){ 
     304                        if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) { 
     305                                // IE copies events bound via attachEvent when 
     306                                // using cloneNode. Calling detachEvent on the 
     307                                // clone will also remove the events from the orignal 
     308                                // In order to get around this, we use innerHTML. 
     309                                // Unfortunately, this means some modifications to 
     310                                // attributes in IE that are actually only stored 
     311                                // as properties will not be copied (such as the 
     312                                // the name attribute on an input). 
     313                                var html = this.outerHTML; 
     314                                if ( !html ) { 
     315                                        var div = this.ownerDocument.createElement("div"); 
     316                                        div.appendChild( this.cloneNode(true) ); 
     317                                        html = div.innerHTML; 
     318                                } 
     319 
     320                                return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0]; 
     321                        } else 
     322                                return this.cloneNode(true); 
     323                }); 
     324 
     325                // Copy the events from the original to the clone 
     326                if ( events === true ) { 
     327                        var orig = this.find("*").andSelf(), i = 0; 
     328 
     329                        ret.find("*").andSelf().each(function(){ 
     330                                if ( this.nodeName !== orig[i].nodeName ) 
     331                                        return; 
     332 
     333                                var events = jQuery.data( orig[i], "events" ); 
     334 
     335                                for ( var type in events ) { 
     336                                        for ( var handler in events[ type ] ) { 
     337                                                jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data ); 
     338                                        } 
     339                                } 
     340 
     341                                i++; 
     342                        }); 
     343                } 
     344 
     345                // Return the cloned set 
     346                return ret; 
     347        }, 
     348 
     349        filter: function( selector ) { 
     350                return this.pushStack( 
     351                        jQuery.isFunction( selector ) && 
     352                        jQuery.grep(this, function(elem, i){ 
     353                                return selector.call( elem, i ); 
     354                        }) || 
     355 
     356                        jQuery.multiFilter( selector, jQuery.grep(this, function(elem){ 
     357                                return elem.nodeType === 1; 
     358                        }) ), "filter", selector ); 
     359        }, 
     360 
     361        closest: function( selector ) { 
     362                var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null, 
     363                        closer = 0; 
     364 
     365                return this.map(function(){ 
     366                        var cur = this; 
     367                        while ( cur && cur.ownerDocument ) { 
     368                                if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) { 
     369                                        jQuery.data(cur, "closest", closer); 
     370                                        return cur; 
     371                                } 
     372                                cur = cur.parentNode; 
     373                                closer++; 
     374                        } 
     375                }); 
     376        }, 
     377 
     378        not: function( selector ) { 
     379                if ( typeof selector === "string" ) 
     380                        // test special case where just one selector is passed in 
     381                        if ( isSimple.test( selector ) ) 
     382                                return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector ); 
     383                        else 
     384                                selector = jQuery.multiFilter( selector, this ); 
     385 
     386                var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType; 
     387                return this.filter(function() { 
     388                        return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector; 
     389                }); 
     390        }, 
     391 
     392        add: function( selector ) { 
     393                return this.pushStack( jQuery.unique( jQuery.merge( 
     394                        this.get(), 
     395                        typeof selector === "string" ? 
     396                                jQuery( selector ) : 
     397                                jQuery.makeArray( selector ) 
     398                ))); 
     399        }, 
     400 
     401        is: function( selector ) { 
     402                return !!selector && jQuery.multiFilter( selector, this ).length > 0; 
     403        }, 
     404 
     405        hasClass: function( selector ) { 
     406                return !!selector && this.is( "." + selector ); 
     407        }, 
     408 
     409        val: function( value ) { 
     410                if ( value === undefined ) { 
     411                        var elem = this[0]; 
     412 
     413                        if ( elem ) { 
     414                                if( jQuery.nodeName( elem, 'option' ) ) 
     415                                        return (elem.attributes.value || {}).specified ? elem.value : elem.text; 
     416 
     417                                // We need to handle select boxes special 
     418                                if ( jQuery.nodeName( elem, "select" ) ) { 
     419                                        var index = elem.selectedIndex, 
     420                                                values = [], 
     421                                                options = elem.options, 
     422                                                one = elem.type == "select-one"; 
     423 
     424                                        // Nothing was selected 
     425                                        if ( index < 0 ) 
     426                                                return null; 
     427 
     428                                        // Loop through all the selected options 
     429                                        for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { 
     430                                                var option = options[ i ]; 
     431 
     432                                                if ( option.selected ) { 
     433                                                        // Get the specifc value for the option 
     434                                                        value = jQuery(option).val(); 
     435 
     436                                                        // We don't need an array for one selects 
     437                                                        if ( one ) 
     438                                                                return value; 
     439 
     440                                                        // Multi-Selects return an array 
     441                                                        values.push( value ); 
     442                                                } 
     443                                        } 
     444 
     445                                        return values; 
     446                                } 
     447 
     448                                // Everything else, we just grab the value 
     449                                return (elem.value || "").replace(/\r/g, ""); 
     450 
     451                        } 
     452 
     453                        return undefined; 
     454                } 
     455 
     456                if ( typeof value === "number" ) 
     457                        value += ''; 
     458 
     459                return this.each(function(){ 
     460                        if ( this.nodeType != 1 ) 
     461                                return; 
     462 
     463                        if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) ) 
     464                                this.checked = (jQuery.inArray(this.value, value) >= 0 || 
     465                                        jQuery.inArray(this.name, value) >= 0); 
     466 
     467                        else if ( jQuery.nodeName( this, "select" ) ) { 
     468                                var values = jQuery.makeArray(value); 
     469 
     470                                jQuery( "option", this ).each(function(){ 
     471                                        this.selected = (jQuery.inArray( this.value, values ) >= 0 || 
     472                                                jQuery.inArray( this.text, values ) >= 0); 
     473                                }); 
     474 
     475                                if ( !values.length ) 
     476                                        this.selectedIndex = -1; 
     477 
     478                        } else 
     479                                this.value = value; 
     480                }); 
     481        }, 
     482 
     483        html: function( value ) { 
     484                return value === undefined ? 
     485                        (this[0] ? 
     486                                this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") : 
     487                                null) : 
     488                        this.empty().append( value ); 
     489        }, 
     490 
     491        replaceWith: function( value ) { 
     492                return this.after( value ).remove(); 
     493        }, 
     494 
     495        eq: function( i ) { 
     496                return this.slice( i, +i + 1 ); 
     497        }, 
     498 
     499        slice: function() { 
     500                return this.pushStack( Array.prototype.slice.apply( this, arguments ), 
     501                        "slice", Array.prototype.slice.call(arguments).join(",") ); 
     502        }, 
     503 
     504        map: function( callback ) { 
     505                return this.pushStack( jQuery.map(this, function(elem, i){ 
     506                        return callback.call( elem, i, elem ); 
     507                })); 
     508        }, 
     509 
     510        andSelf: function() { 
     511                return this.add( this.prevObject ); 
     512        }, 
     513 
     514        domManip: function( args, table, callback ) { 
     515                if ( this[0] ) { 
     516                        var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(), 
     517                                scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ), 
     518                                first = fragment.firstChild; 
     519 
     520                        if ( first ) 
     521                                for ( var i = 0, l = this.length; i < l; i++ ) 
     522                                        callback.call( root(this[i], first), this.length > 1 || i > 0 ? 
     523                                                        fragment.cloneNode(true) : fragment ); 
     524 
     525                        if ( scripts ) 
     526                                jQuery.each( scripts, evalScript ); 
     527                } 
     528 
     529                return this; 
     530 
     531                function root( elem, cur ) { 
     532                        return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ? 
     533                                (elem.getElementsByTagName("tbody")[0] || 
     534                                elem.appendChild(elem.ownerDocument.createElement("tbody"))) : 
     535                                elem; 
     536                } 
     537        } 
     538}; 
     539 
     540// Give the init function the jQuery prototype for later instantiation 
     541jQuery.fn.init.prototype = jQuery.fn; 
     542 
     543function evalScript( i, elem ) { 
     544        if ( elem.src ) 
     545                jQuery.ajax({ 
     546                        url: elem.src, 
     547                        async: false, 
     548                        dataType: "script" 
     549                }); 
     550 
     551        else 
     552                jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); 
     553 
     554        if ( elem.parentNode ) 
     555                elem.parentNode.removeChild( elem ); 
     556} 
     557 
     558function now(){ 
     559        return +new Date; 
     560} 
     561 
     562jQuery.extend = jQuery.fn.extend = function() { 
     563        // copy reference to target object 
     564        var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; 
     565 
     566        // Handle a deep copy situation 
     567        if ( typeof target === "boolean" ) { 
     568                deep = target; 
     569                target = arguments[1] || {}; 
     570                // skip the boolean and the target 
     571                i = 2; 
     572        } 
     573 
     574        // Handle case when target is a string or something (possible in deep copy) 
     575        if ( typeof target !== "object" && !jQuery.isFunction(target) ) 
     576                target = {}; 
     577 
     578        // extend jQuery itself if only one argument is passed 
     579        if ( length == i ) { 
     580                target = this; 
     581                --i; 
     582        } 
     583 
     584        for ( ; i < length; i++ ) 
     585                // Only deal with non-null/undefined values 
     586                if ( (options = arguments[ i ]) != null ) 
     587                        // Extend the base object 
     588                        for ( var name in options ) { 
     589                                var src = target[ name ], copy = options[ name ]; 
     590 
     591                                // Prevent never-ending loop 
     592                                if ( target === copy ) 
     593                                        continue; 
     594 
     595                                // Recurse if we're merging object values 
     596                                if ( deep && copy && typeof copy === "object" && !copy.nodeType ) 
     597                                        target[ name ] = jQuery.extend( deep, 
     598                                                // Never move original objects, clone them 
     599                                                src || ( copy.length != null ? [ ] : { } ) 
     600                                        , copy ); 
     601 
     602                                // Don't bring in undefined values 
     603                                else if ( copy !== undefined ) 
     604                                        target[ name ] = copy; 
     605 
     606                        } 
     607 
     608        // Return the modified object 
     609        return target; 
     610}; 
     611 
     612// exclude the following css properties to add px 
     613var     exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, 
     614        // cache defaultView 
     615        defaultView = document.defaultView || {}, 
     616        toString = Object.prototype.toString; 
     617 
     618jQuery.extend({ 
     619        noConflict: function( deep ) { 
     620                window.$ = _$; 
     621 
     622                if ( deep ) 
     623                        window.jQuery = _jQuery; 
     624 
     625                return jQuery; 
     626        }, 
     627 
     628        // See test/unit/core.js for details concerning isFunction. 
     629        // Since version 1.3, DOM methods and functions like alert 
     630        // aren't supported. They return false on IE (#2968). 
     631        isFunction: function( obj ) { 
     632                return toString.call(obj) === "[object Function]"; 
     633        }, 
     634 
     635        isArray: function( obj ) { 
     636                return toString.call(obj) === "[object Array]"; 
     637        }, 
     638 
     639        // check if an element is in a (or is an) XML document 
     640        isXMLDoc: function( elem ) { 
     641                return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || 
     642                        !!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument ); 
     643        }, 
     644 
     645        // Evalulates a script in a global context 
     646        globalEval: function( data ) { 
     647                if ( data && /\S/.test(data) ) { 
     648                        // Inspired by code by Andrea Giammarchi 
     649                        // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html 
     650                        var head = document.getElementsByTagName("head")[0] || document.documentElement, 
     651                                script = document.createElement("script"); 
     652 
     653                        script.type = "text/javascript"; 
     654                        if ( jQuery.support.scriptEval ) 
     655                                script.appendChild( document.createTextNode( data ) ); 
     656                        else 
     657                                script.text = data; 
     658 
     659                        // Use insertBefore instead of appendChild  to circumvent an IE6 bug. 
     660                        // This arises when a base node is used (#2709). 
     661                        head.insertBefore( script, head.firstChild ); 
     662                        head.removeChild( script ); 
     663                } 
     664        }, 
     665 
     666        nodeName: function( elem, name ) { 
     667                return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); 
     668        }, 
     669 
     670        // args is for internal usage only 
     671        each: function( object, callback, args ) { 
     672                var name, i = 0, length = object.length; 
     673 
     674                if ( args ) { 
     675                        if ( length === undefined ) { 
     676                                for ( name in object ) 
     677                                        if ( callback.apply( object[ name ], args ) === false ) 
     678                                                break; 
     679                        } else 
     680                                for ( ; i < length; ) 
     681                                        if ( callback.apply( object[ i++ ], args ) === false ) 
     682                                                break; 
     683 
     684                // A special, fast, case for the most common use of each 
     685                } else { 
     686                        if ( length === undefined ) { 
     687                                for ( name in object ) 
     688                                        if ( callback.call( object[ name ], name, object[ name ] ) === false ) 
     689                                                break; 
     690                        } else 
     691                                for ( var value = object[0]; 
     692                                        i < length && callback.call( value, i, value ) !== false; value = object[++i] ){} 
     693                } 
     694 
     695                return object; 
     696        }, 
     697 
     698        prop: function( elem, value, type, i, name ) { 
     699                // Handle executable functions 
     700                if ( jQuery.isFunction( value ) ) 
     701                        value = value.call( elem, i ); 
     702 
     703                // Handle passing in a number to a CSS property 
     704                return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ? 
     705                        value + "px" : 
     706                        value; 
     707        }, 
     708 
     709        className: { 
     710                // internal only, use addClass("class") 
     711                add: function( elem, classNames ) { 
     712                        jQuery.each((classNames || "").split(/\s+/), function(i, className){ 
     713                                if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) ) 
     714                                        elem.className += (elem.className ? " " : "") + className; 
     715                        }); 
     716                }, 
     717 
     718                // internal only, use removeClass("class") 
     719                remove: function( elem, classNames ) { 
     720                        if (elem.nodeType == 1) 
     721                                elem.className = classNames !== undefined ? 
     722                                        jQuery.grep(elem.className.split(/\s+/), function(className){ 
     723                                                return !jQuery.className.has( classNames, className ); 
     724                                        }).join(" ") : 
     725                                        ""; 
     726                }, 
     727 
     728                // internal only, use hasClass("class") 
     729                has: function( elem, className ) { 
     730                        return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1; 
     731                } 
     732        }, 
     733 
     734        // A method for quickly swapping in/out CSS properties to get correct calculations 
     735        swap: function( elem, options, callback ) { 
     736                var old = {}; 
     737                // Remember the old values, and insert the new ones 
     738                for ( var name in options ) { 
     739                        old[ name ] = elem.style[ name ]; 
     740                        elem.style[ name ] = options[ name ]; 
     741                } 
     742 
     743                callback.call( elem ); 
     744 
     745                // Revert the old values 
     746                for ( var name in options ) 
     747                        elem.style[ name ] = old[ name ]; 
     748        }, 
     749 
     750        css: function( elem, name, force, extra ) { 
     751                if ( name == "width" || name == "height" ) { 
     752                        var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ]; 
     753 
     754                        function getWH() { 
     755                                val = name == "width" ? elem.offsetWidth : elem.offsetHeight; 
     756 
     757                                if ( extra === "border" ) 
     758                                        return; 
     759 
     760                                jQuery.each( which, function() { 
     761                                        if ( !extra ) 
     762                                                val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; 
     763                                        if ( extra === "margin" ) 
     764                                                val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0; 
     765                                        else 
     766                                                val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; 
     767                                }); 
     768                        } 
     769 
     770                        if ( elem.offsetWidth !== 0 ) 
     771                                getWH(); 
     772                        else 
     773                                jQuery.swap( elem, props, getWH ); 
     774 
     775                        return Math.max(0, Math.round(val)); 
     776                } 
     777 
     778                return jQuery.curCSS( elem, name, force ); 
     779        }, 
     780 
     781        curCSS: function( elem, name, force ) { 
     782                var ret, style = elem.style; 
     783 
     784                // We need to handle opacity special in IE 
     785                if ( name == "opacity" && !jQuery.support.opacity ) { 
     786                        ret = jQuery.attr( style, "opacity" ); 
     787 
     788                        return ret == "" ? 
     789                                "1" : 
     790                                ret; 
     791                } 
     792 
     793                // Make sure we're using the right name for getting the float value 
     794                if ( name.match( /float/i ) ) 
     795                        name = styleFloat; 
     796 
     797                if ( !force && style && style[ name ] ) 
     798                        ret = style[ name ]; 
     799 
     800                else if ( defaultView.getComputedStyle ) { 
     801 
     802                        // Only "float" is needed here 
     803                        if ( name.match( /float/i ) ) 
     804                                name = "float"; 
     805 
     806                        name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase(); 
     807 
     808                        var computedStyle = defaultView.getComputedStyle( elem, null ); 
     809 
     810                        if ( computedStyle ) 
     811                                ret = computedStyle.getPropertyValue( name ); 
     812 
     813                        // We should always get a number back from opacity 
     814                        if ( name == "opacity" && ret == "" ) 
     815                                ret = "1"; 
     816 
     817                } else if ( elem.currentStyle ) { 
     818                        var camelCase = name.replace(/\-(\w)/g, function(all, letter){ 
     819                                return letter.toUpperCase(); 
     820                        }); 
     821 
     822                        ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ]; 
     823 
     824                        // From the awesome hack by Dean Edwards 
     825                        // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 
     826 
     827                        // If we're not dealing with a regular pixel number 
     828                        // but a number that has a weird ending, we need to convert it to pixels 
     829                        if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) { 
     830                                // Remember the original values 
     831                                var left = style.left, rsLeft = elem.runtimeStyle.left; 
     832 
     833                                // Put in the new values to get a computed value out 
     834                                elem.runtimeStyle.left = elem.currentStyle.left; 
     835                                style.left = ret || 0; 
     836                                ret = style.pixelLeft + "px"; 
     837 
     838                                // Revert the changed values 
     839                                style.left = left; 
     840                                elem.runtimeStyle.left = rsLeft; 
     841                        } 
     842                } 
     843 
     844                return ret; 
     845        }, 
     846 
     847        clean: function( elems, context, fragment ) { 
     848                context = context || document; 
     849 
     850                // !context.createElement fails in IE with an error but returns typeof 'object' 
     851                if ( typeof context.createElement === "undefined" ) 
     852                        context = context.ownerDocument || context[0] && context[0].ownerDocument || document; 
     853 
     854                // If a single string is passed in and it's a single tag 
     855                // just do a createElement and skip the rest 
     856                if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) { 
     857                        var match = /^<(\w+)\s*\/?>$/.exec(elems[0]); 
     858                        if ( match ) 
     859                                return [ context.createElement( match[1] ) ]; 
     860                } 
     861 
     862                var ret = [], scripts = [], div = context.createElement("div"); 
     863 
     864                jQuery.each(elems, function(i, elem){ 
     865                        if ( typeof elem === "number" ) 
     866                                elem += ''; 
     867 
     868                        if ( !elem ) 
     869                                return; 
     870 
     871                        // Convert html string into DOM nodes 
     872                        if ( typeof elem === "string" ) { 
     873                                // Fix "XHTML"-style tags in all browsers 
     874                                elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){ 
     875                                        return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? 
     876                                                all : 
     877                                                front + "></" + tag + ">"; 
     878                                }); 
     879 
     880                                // Trim whitespace, otherwise indexOf won't work as expected 
     881                                var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase(); 
     882 
     883                                var wrap = 
     884                                        // option or optgroup 
     885                                        !tags.indexOf("<opt") && 
     886                                        [ 1, "<select multiple='multiple'>", "</select>" ] || 
     887 
     888                                        !tags.indexOf("<leg") && 
     889                                        [ 1, "<fieldset>", "</fieldset>" ] || 
     890 
     891                                        tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && 
     892                                        [ 1, "<table>", "</table>" ] || 
     893 
     894                                        !tags.indexOf("<tr") && 
     895                                        [ 2, "<table><tbody>", "</tbody></table>" ] || 
     896 
     897                                        // <thead> matched above 
     898                                        (!tags.indexOf("<td") || !tags.indexOf("<th")) && 
     899                                        [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] || 
     900 
     901                                        !tags.indexOf("<col") && 
     902                                        [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] || 
     903 
     904                                        // IE can't serialize <link> and <script> tags normally 
     905                                        !jQuery.support.htmlSerialize && 
     906                                        [ 1, "div<div>", "</div>" ] || 
     907 
     908                                        [ 0, "", "" ]; 
     909 
     910                                // Go to html and back, then peel off extra wrappers 
     911                                div.innerHTML = wrap[1] + elem + wrap[2]; 
     912 
     913                                // Move to the right depth 
     914                                while ( wrap[0]-- ) 
     915                                        div = div.lastChild; 
     916 
     917                                // Remove IE's autoinserted <tbody> from table fragments 
     918                                if ( !jQuery.support.tbody ) { 
     919 
     920                                        // String was a <table>, *may* have spurious <tbody> 
     921                                        var hasBody = /<tbody/i.test(elem), 
     922                                                tbody = !tags.indexOf("<table") && !hasBody ? 
     923                                                        div.firstChild && div.firstChild.childNodes : 
     924 
     925                                                // String was a bare <thead> or <tfoot> 
     926                                                wrap[1] == "<table>" && !hasBody ? 
     927                                                        div.childNodes : 
     928                                                        []; 
     929 
     930                                        for ( var j = tbody.length - 1; j >= 0 ; --j ) 
     931                                                if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) 
     932                                                        tbody[ j ].parentNode.removeChild( tbody[ j ] ); 
     933 
     934                                        } 
     935 
     936                                // IE completely kills leading whitespace when innerHTML is used 
     937                                if ( !jQuery.support.leadingWhitespace && /^\s/.test( elem ) ) 
     938                                        div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild ); 
     939 
     940                                elem = jQuery.makeArray( div.childNodes ); 
     941                        } 
     942 
     943                        if ( elem.nodeType ) 
     944                                ret.push( elem ); 
     945                        else 
     946                                ret = jQuery.merge( ret, elem ); 
     947 
     948                }); 
     949 
     950                if ( fragment ) { 
     951                        for ( var i = 0; ret[i]; i++ ) { 
     952                                if ( jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) { 
     953                                        scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] ); 
     954                                } else { 
     955                                        if ( ret[i].nodeType === 1 ) 
     956                                                ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) ); 
     957                                        fragment.appendChild( ret[i] ); 
     958                                } 
     959                        } 
     960 
     961                        return scripts; 
     962                } 
     963 
     964                return ret; 
     965        }, 
     966 
     967        attr: function( elem, name, value ) { 
     968                // don't set attributes on text and comment nodes 
     969                if (!elem || elem.nodeType == 3 || elem.nodeType == 8) 
     970                        return undefined; 
     971 
     972                var notxml = !jQuery.isXMLDoc( elem ), 
     973                        // Whether we are setting (or getting) 
     974                        set = value !== undefined; 
     975 
     976                // Try to normalize/fix the name 
     977                name = notxml && jQuery.props[ name ] || name; 
     978 
     979                // Only do all the following if this is a node (faster for style) 
     980                // IE elem.getAttribute passes even for style 
     981                if ( elem.tagName ) { 
     982 
     983                        // These attributes require special treatment 
     984                        var special = /href|src|style/.test( name ); 
     985 
     986                        // Safari mis-reports the default selected property of a hidden option 
     987                        // Accessing the parent's selectedIndex property fixes it 
     988                        if ( name == "selected" && elem.parentNode ) 
     989                                elem.parentNode.selectedIndex; 
     990 
     991                        // If applicable, access the attribute via the DOM 0 way 
     992                        if ( name in elem && notxml && !special ) { 
     993                                if ( set ){ 
     994                                        // We can't allow the type property to be changed (since it causes problems in IE) 
     995                                        if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode ) 
     996                                                throw "type property can't be changed"; 
     997 
     998                                        elem[ name ] = value; 
     999                                } 
     1000 
     1001                                // browsers index elements by id/name on forms, give priority to attributes. 
     1002                                if( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) 
     1003                                        return elem.getAttributeNode( name ).nodeValue; 
     1004 
     1005                                // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set 
     1006                                // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ 
     1007                                if ( name == "tabIndex" ) { 
     1008                                        var attributeNode = elem.getAttributeNode( "tabIndex" ); 
     1009                                        return attributeNode && attributeNode.specified 
     1010                                                ? attributeNode.value 
     1011                                                : elem.nodeName.match(/(button|input|object|select|textarea)/i) 
     1012                                                        ? 0 
     1013                                                        : elem.nodeName.match(/^(a|area)$/i) && elem.href 
     1014                                                                ? 0 
     1015                                                                : undefined; 
     1016                                } 
     1017 
     1018                                return elem[ name ]; 
     1019                        } 
     1020 
     1021                        if ( !jQuery.support.style && notxml &&  name == "style" ) 
     1022                                return jQuery.attr( elem.style, "cssText", value ); 
     1023 
     1024                        if ( set ) 
     1025                                // convert the value to a string (all browsers do this but IE) see #1070 
     1026                                elem.setAttribute( name, "" + value ); 
     1027 
     1028                        var attr = !jQuery.support.hrefNormalized && notxml && special 
     1029                                        // Some attributes require a special call on IE 
     1030                                        ? elem.getAttribute( name, 2 ) 
     1031                                        : elem.getAttribute( name ); 
     1032 
     1033                        // Non-existent attributes return null, we normalize to undefined 
     1034                        return attr === null ? undefined : attr; 
     1035                } 
     1036 
     1037                // elem is actually elem.style ... set the style 
     1038 
     1039                // IE uses filters for opacity 
     1040                if ( !jQuery.support.opacity && name == "opacity" ) { 
     1041                        if ( set ) { 
     1042                                // IE has trouble with opacity if it does not have layout 
     1043                                // Force it by setting the zoom level 
     1044                                elem.zoom = 1; 
     1045 
     1046                                // Set the alpha filter to set the opacity 
     1047                                elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) + 
     1048                                        (parseInt( value ) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")"); 
     1049                        } 
     1050 
     1051                        return elem.filter && elem.filter.indexOf("opacity=") >= 0 ? 
     1052                                (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '': 
     1053                                ""; 
     1054                } 
     1055 
     1056                name = name.replace(/-([a-z])/ig, function(all, letter){ 
     1057                        return letter.toUpperCase(); 
     1058                }); 
     1059 
     1060                if ( set ) 
     1061                        elem[ name ] = value; 
     1062 
     1063                return elem[ name ]; 
     1064        }, 
     1065 
     1066        trim: function( text ) { 
     1067                return (text || "").replace( /^\s+|\s+$/g, "" ); 
     1068        }, 
     1069 
     1070        makeArray: function( array ) { 
     1071                var ret = []; 
     1072 
     1073                if( array != null ){ 
     1074                        var i = array.length; 
     1075                        // The window, strings (and functions) also have 'length' 
     1076                        if( i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval ) 
     1077                                ret[0] = array; 
     1078                        else 
     1079                                while( i ) 
     1080                                        ret[--i] = array[i]; 
     1081                } 
     1082 
     1083                return ret; 
     1084        }, 
     1085 
     1086        inArray: function( elem, array ) { 
     1087                for ( var i = 0, length = array.length; i < length; i++ ) 
     1088                // Use === because on IE, window == document 
     1089                        if ( array[ i ] === elem ) 
     1090                                return i; 
     1091 
     1092                return -1; 
     1093        }, 
     1094 
     1095        merge: function( first, second ) { 
     1096                // We have to loop this way because IE & Opera overwrite the length 
     1097                // expando of getElementsByTagName 
     1098                var i = 0, elem, pos = first.length; 
     1099                // Also, we need to make sure that the correct elements are being returned 
     1100                // (IE returns comment nodes in a '*' query) 
     1101                if ( !jQuery.support.getAll ) { 
     1102                        while ( (elem = second[ i++ ]) != null ) 
     1103                                if ( elem.nodeType != 8 ) 
     1104                                        first[ pos++ ] = elem; 
     1105 
     1106                } else 
     1107                        while ( (elem = second[ i++ ]) != null ) 
     1108                                first[ pos++ ] = elem; 
     1109 
     1110                return first; 
     1111        }, 
     1112 
     1113        unique: function( array ) { 
     1114                var ret = [], done = {}; 
     1115 
     1116                try { 
     1117 
     1118                        for ( var i = 0, length = array.length; i < length; i++ ) { 
     1119                                var id = jQuery.data( array[ i ] ); 
     1120 
     1121                                if ( !done[ id ] ) { 
     1122                                        done[ id ] = true; 
     1123                                        ret.push( array[ i ] ); 
     1124                                } 
     1125                        } 
     1126 
     1127                } catch( e ) { 
     1128                        ret = array; 
     1129                } 
     1130 
     1131                return ret; 
     1132        }, 
     1133 
     1134        grep: function( elems, callback, inv ) { 
     1135                var ret = []; 
     1136 
     1137                // Go through the array, only saving the items 
     1138                // that pass the validator function 
     1139                for ( var i = 0, length = elems.length; i < length; i++ ) 
     1140                        if ( !inv != !callback( elems[ i ], i ) ) 
     1141                                ret.push( elems[ i ] ); 
     1142 
     1143                return ret; 
     1144        }, 
     1145 
     1146        map: function( elems, callback ) { 
     1147                var ret = []; 
     1148 
     1149                // Go through the array, translating each of the items to their 
     1150                // new value (or values). 
     1151                for ( var i = 0, length = elems.length; i < length; i++ ) { 
     1152                        var value = callback( elems[ i ], i ); 
     1153 
     1154                        if ( value != null ) 
     1155                                ret[ ret.length ] = value; 
     1156                } 
     1157 
     1158                return ret.concat.apply( [], ret ); 
     1159        } 
     1160}); 
     1161 
     1162// Use of jQuery.browser is deprecated. 
     1163// It's included for backwards compatibility and plugins, 
     1164// although they should work to migrate away. 
     1165 
     1166var userAgent = navigator.userAgent.toLowerCase(); 
     1167 
     1168// Figure out what browser is being used 
     1169jQuery.browser = { 
     1170        version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1], 
     1171        safari: /webkit/.test( userAgent ), 
     1172        opera: /opera/.test( userAgent ), 
     1173        msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ), 
     1174        mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent ) 
     1175}; 
     1176 
     1177jQuery.each({ 
     1178        parent: function(elem){return elem.parentNode;}, 
     1179        parents: function(elem){return jQuery.dir(elem,"parentNode");}, 
     1180        next: function(elem){return jQuery.nth(elem,2,"nextSibling");}, 
     1181        prev: function(elem){return jQuery.nth(elem,2,"previousSibling");}, 
     1182        nextAll: function(elem){return jQuery.dir(elem,"nextSibling");}, 
     1183        prevAll: function(elem){return jQuery.dir(elem,"previousSibling");}, 
     1184        siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);}, 
     1185        children: function(elem){return jQuery.sibling(elem.firstChild);}, 
     1186        contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);} 
     1187}, function(name, fn){ 
     1188        jQuery.fn[ name ] = function( selector ) { 
     1189                var ret = jQuery.map( this, fn ); 
     1190 
     1191                if ( selector && typeof selector == "string" ) 
     1192                        ret = jQuery.multiFilter( selector, ret ); 
     1193 
     1194                return this.pushStack( jQuery.unique( ret ), name, selector ); 
     1195        }; 
     1196}); 
     1197 
     1198jQuery.each({ 
     1199        appendTo: "append", 
     1200        prependTo: "prepend", 
     1201        insertBefore: "before", 
     1202        insertAfter: "after", 
     1203        replaceAll: "replaceWith" 
     1204}, function(name, original){ 
     1205        jQuery.fn[ name ] = function( selector ) { 
     1206                var ret = [], insert = jQuery( selector ); 
     1207 
     1208                for ( var i = 0, l = insert.length; i < l; i++ ) { 
     1209                        var elems = (i > 0 ? this.clone(true) : this).get(); 
     1210                        jQuery.fn[ original ].apply( jQuery(insert[i]), elems ); 
     1211                        ret = ret.concat( elems ); 
     1212                } 
     1213 
     1214                return this.pushStack( ret, name, selector ); 
     1215        }; 
     1216}); 
     1217 
     1218jQuery.each({ 
     1219        removeAttr: function( name ) { 
     1220                jQuery.attr( this, name, "" ); 
     1221                if (this.nodeType == 1) 
     1222                        this.removeAttribute( name ); 
     1223        }, 
     1224 
     1225        addClass: function( classNames ) { 
     1226                jQuery.className.add( this, classNames ); 
     1227        }, 
     1228 
     1229        removeClass: function( classNames ) { 
     1230                jQuery.className.remove( this, classNames ); 
     1231        }, 
     1232 
     1233        toggleClass: function( classNames, state ) { 
     1234                if( typeof state !== "boolean" ) 
     1235                        state = !jQuery.className.has( this, classNames ); 
     1236                jQuery.className[ state ? "add" : "remove" ]( this, classNames ); 
     1237        }, 
     1238 
     1239        remove: function( selector ) { 
     1240                if ( !selector || jQuery.filter( selector, [ this ] ).length ) { 
     1241                        // Prevent memory leaks 
     1242                        jQuery( "*", this ).add([this]).each(function(){ 
     1243                                jQuery.event.remove(this); 
     1244                                jQuery.removeData(this); 
     1245                        }); 
     1246                        if (this.parentNode) 
     1247                                this.parentNode.removeChild( this ); 
     1248                } 
     1249        }, 
     1250 
     1251        empty: function() { 
     1252                // Remove element nodes and prevent memory leaks 
     1253                jQuery(this).children().remove(); 
     1254 
     1255                // Remove any remaining nodes 
     1256                while ( this.firstChild ) 
     1257                        this.removeChild( this.firstChild ); 
     1258        } 
     1259}, function(name, fn){ 
     1260        jQuery.fn[ name ] = function(){ 
     1261                return this.each( fn, arguments ); 
     1262        }; 
     1263}); 
     1264 
     1265// Helper function used by the dimensions and offset modules 
     1266function num(elem, prop) { 
     1267        return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0; 
     1268} 
     1269var expando = "jQuery" + now(), uuid = 0, windowData = {}; 
     1270 
     1271jQuery.extend({ 
     1272        cache: {}, 
     1273 
     1274        data: function( elem, name, data ) { 
     1275                elem = elem == window ? 
     1276                        windowData : 
     1277                        elem; 
     1278 
     1279                var id = elem[ expando ]; 
     1280 
     1281                // Compute a unique ID for the element 
     1282                if ( !id ) 
     1283                        id = elem[ expando ] = ++uuid; 
     1284 
     1285                // Only generate the data cache if we're 
     1286                // trying to access or manipulate it 
     1287                if ( name && !jQuery.cache[ id ] ) 
     1288                        jQuery.cache[ id ] = {}; 
     1289 
     1290                // Prevent overriding the named cache with undefined values 
     1291                if ( data !== undefined ) 
     1292                        jQuery.cache[ id ][ name ] = data; 
     1293 
     1294                // Return the named cache data, or the ID for the element 
     1295                return name ? 
     1296                        jQuery.cache[ id ][ name ] : 
     1297                        id; 
     1298        }, 
     1299 
     1300        removeData: function( elem, name ) { 
     1301                elem = elem == window ? 
     1302                        windowData : 
     1303                        elem; 
     1304 
     1305                var id = elem[ expando ]; 
     1306 
     1307                // If we want to remove a specific section of the element's data 
     1308                if ( name ) { 
     1309                        if ( jQuery.cache[ id ] ) { 
     1310                                // Remove the section of cache data 
     1311                                delete jQuery.cache[ id ][ name ]; 
     1312 
     1313                                // If we've removed all the data, remove the element's cache 
     1314                                name = ""; 
     1315 
     1316                                for ( name in jQuery.cache[ id ] ) 
     1317                                        break; 
     1318 
     1319                                if ( !name ) 
     1320                                        jQuery.removeData( elem ); 
     1321                        } 
     1322 
     1323                // Otherwise, we want to remove all of the element's data 
     1324                } else { 
     1325                        // Clean up the element expando 
     1326                        try { 
     1327                                delete elem[ expando ]; 
     1328                        } catch(e){ 
     1329                                // IE has trouble directly removing the expando 
     1330                                // but it's ok with using removeAttribute 
     1331                                if ( elem.removeAttribute ) 
     1332                                        elem.removeAttribute( expando ); 
     1333                        } 
     1334 
     1335                        // Completely remove the data cache 
     1336                        delete jQuery.cache[ id ]; 
     1337                } 
     1338        }, 
     1339        queue: function( elem, type, data ) { 
     1340                if ( elem ){ 
     1341 
     1342                        type = (type || "fx") + "queue"; 
     1343 
     1344                        var q = jQuery.data( elem, type ); 
     1345 
     1346                        if ( !q || jQuery.isArray(data) ) 
     1347                                q = jQuery.data( elem, type, jQuery.makeArray(data) ); 
     1348                        else if( data ) 
     1349                                q.push( data ); 
     1350 
     1351                } 
     1352                return q; 
     1353        }, 
     1354 
     1355        dequeue: function( elem, type ){ 
     1356                var queue = jQuery.queue( elem, type ), 
     1357                        fn = queue.shift(); 
     1358 
     1359                if( !type || type === "fx" ) 
     1360                        fn = queue[0]; 
     1361 
     1362                if( fn !== undefined ) 
     1363                        fn.call(elem); 
     1364        } 
     1365}); 
     1366 
     1367jQuery.fn.extend({ 
     1368        data: function( key, value ){ 
     1369                var parts = key.split("."); 
     1370                parts[1] = parts[1] ? "." + parts[1] : ""; 
     1371 
     1372                if ( value === undefined ) { 
     1373                        var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); 
     1374 
     1375                        if ( data === undefined && this.length ) 
     1376                                data = jQuery.data( this[0], key ); 
     1377 
     1378                        return data === undefined && parts[1] ? 
     1379                                this.data( parts[0] ) : 
     1380                                data; 
     1381                } else 
     1382                        return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){ 
     1383                                jQuery.data( this, key, value ); 
     1384                        }); 
     1385        }, 
     1386 
     1387        removeData: function( key ){ 
     1388                return this.each(function(){ 
     1389                        jQuery.removeData( this, key ); 
     1390                }); 
     1391        }, 
     1392        queue: function(type, data){ 
     1393                if ( typeof type !== "string" ) { 
     1394                        data = type; 
     1395                        type = "fx"; 
     1396                } 
     1397 
     1398                if ( data === undefined ) 
     1399                        return jQuery.queue( this[0], type ); 
     1400 
     1401                return this.each(function(){ 
     1402                        var queue = jQuery.queue( this, type, data ); 
     1403 
     1404                         if( type == "fx" && queue.length == 1 ) 
     1405                                queue[0].call(this); 
     1406                }); 
     1407        }, 
     1408        dequeue: function(type){ 
     1409                return this.each(function(){ 
     1410                        jQuery.dequeue( this, type ); 
     1411                }); 
     1412        } 
     1413});/*! 
    141414 * Sizzle CSS Selector Engine - v0.9.3 
    151415 *  Copyright 2009, The Dojo Foundation 
     
    171417 *  More information: http://sizzlejs.com/ 
    181418 */ 
    19 (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")}})})(); 
     1419(function(){ 
     1420 
     1421var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g, 
     1422        done = 0, 
     1423        toString = Object.prototype.toString; 
     1424 
     1425var Sizzle = function(selector, context, results, seed) { 
     1426        results = results || []; 
     1427        context = context || document; 
     1428 
     1429        if ( context.nodeType !== 1 && context.nodeType !== 9 ) 
     1430                return []; 
     1431 
     1432        if ( !selector || typeof selector !== "string" ) { 
     1433                return results; 
     1434        } 
     1435 
     1436        var parts = [], m, set, checkSet, check, mode, extra, prune = true; 
     1437 
     1438        // Reset the position of the chunker regexp (start from head) 
     1439        chunker.lastIndex = 0; 
     1440 
     1441        while ( (m = chunker.exec(selector)) !== null ) { 
     1442                parts.push( m[1] ); 
     1443 
     1444                if ( m[2] ) { 
     1445                        extra = RegExp.rightContext; 
     1446                        break; 
     1447                } 
     1448        } 
     1449 
     1450        if ( parts.length > 1 && origPOS.exec( selector ) ) { 
     1451                if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { 
     1452                        set = posProcess( parts[0] + parts[1], context ); 
     1453                } else { 
     1454                        set = Expr.relative[ parts[0] ] ? 
     1455                                [ context ] : 
     1456                                Sizzle( parts.shift(), context ); 
     1457 
     1458                        while ( parts.length ) { 
     1459                                selector = parts.shift(); 
     1460 
     1461                                if ( Expr.relative[ selector ] ) 
     1462                                        selector += parts.shift(); 
     1463 
     1464                                set = posProcess( selector, set ); 
     1465                        } 
     1466                } 
     1467        } else { 
     1468                var ret = seed ? 
     1469                        { expr: parts.pop(), set: makeArray(seed) } : 
     1470                        Sizzle.find( parts.pop(), parts.length === 1 && context.parentNode ? context.parentNode : context, isXML(context) ); 
     1471                set = Sizzle.filter( ret.expr, ret.set ); 
     1472 
     1473                if ( parts.length > 0 ) { 
     1474                        checkSet = makeArray(set); 
     1475                } else { 
     1476                        prune = false; 
     1477                } 
     1478 
     1479                while ( parts.length ) { 
     1480                        var cur = parts.pop(), pop = cur; 
     1481 
     1482                        if ( !Expr.relative[ cur ] ) { 
     1483                                cur = ""; 
     1484                        } else { 
     1485                                pop = parts.pop(); 
     1486                        } 
     1487 
     1488                        if ( pop == null ) { 
     1489                                pop = context; 
     1490                        } 
     1491 
     1492                        Expr.relative[ cur ]( checkSet, pop, isXML(context) ); 
     1493                } 
     1494        } 
     1495 
     1496        if ( !checkSet ) { 
     1497                checkSet = set; 
     1498        } 
     1499 
     1500        if ( !checkSet ) { 
     1501                throw "Syntax error, unrecognized expression: " + (cur || selector); 
     1502        } 
     1503 
     1504        if ( toString.call(checkSet) === "[object Array]" ) { 
     1505                if ( !prune ) { 
     1506                        results.push.apply( results, checkSet ); 
     1507                } else if ( context.nodeType === 1 ) { 
     1508                        for ( var i = 0; checkSet[i] != null; i++ ) { 
     1509                                if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { 
     1510                                        results.push( set[i] ); 
     1511                                } 
     1512                        } 
     1513                } else { 
     1514                        for ( var i = 0; checkSet[i] != null; i++ ) { 
     1515                                if ( checkSet[i] && checkSet[i].nodeType === 1 ) { 
     1516                                        results.push( set[i] ); 
     1517                                } 
     1518                        } 
     1519                } 
     1520        } else { 
     1521                makeArray( checkSet, results ); 
     1522        } 
     1523 
     1524        if ( extra ) { 
     1525                Sizzle( extra, context, results, seed ); 
     1526 
     1527                if ( sortOrder ) { 
     1528                        hasDuplicate = false; 
     1529                        results.sort(sortOrder); 
     1530 
     1531                        if ( hasDuplicate ) { 
     1532                                for ( var i = 1; i < results.length; i++ ) { 
     1533                                        if ( results[i] === results[i-1] ) { 
     1534                                                results.splice(i--, 1); 
     1535                                        } 
     1536                                } 
     1537                        } 
     1538                } 
     1539        } 
     1540 
     1541        return results; 
     1542}; 
     1543 
     1544Sizzle.matches = function(expr, set){ 
     1545        return Sizzle(expr, null, null, set); 
     1546}; 
     1547 
     1548Sizzle.find = function(expr, context, isXML){ 
     1549        var set, match; 
     1550 
     1551        if ( !expr ) { 
     1552                return []; 
     1553        } 
     1554 
     1555        for ( var i = 0, l = Expr.order.length; i < l; i++ ) { 
     1556                var type = Expr.order[i], match; 
     1557 
     1558                if ( (match = Expr.match[ type ].exec( expr )) ) { 
     1559                        var left = RegExp.leftContext; 
     1560 
     1561                        if ( left.substr( left.length - 1 ) !== "\\" ) { 
     1562                                match[1] = (match[1] || "").replace(/\\/g, ""); 
     1563                                set = Expr.find[ type ]( match, context, isXML ); 
     1564                                if ( set != null ) { 
     1565                                        expr = expr.replace( Expr.match[ type ], "" ); 
     1566                                        break; 
     1567                                } 
     1568                        } 
     1569                } 
     1570        } 
     1571 
     1572        if ( !set ) { 
     1573                set = context.getElementsByTagName("*"); 
     1574        } 
     1575 
     1576        return {set: set, expr: expr}; 
     1577}; 
     1578 
     1579Sizzle.filter = function(expr, set, inplace, not){ 
     1580        var old = expr, result = [], curLoop = set, match, anyFound, 
     1581                isXMLFilter = set && set[0] && isXML(set[0]); 
     1582 
     1583        while ( expr && set.length ) { 
     1584                for ( var type in Expr.filter ) { 
     1585                        if ( (match = Expr.match[ type ].exec( expr )) != null ) { 
     1586                                var filter = Expr.filter[ type ], found, item; 
     1587                                anyFound = false; 
     1588 
     1589                                if ( curLoop == result ) { 
     1590                                        result = []; 
     1591                                } 
     1592 
     1593                                if ( Expr.preFilter[ type ] ) { 
     1594                                        match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); 
     1595 
     1596                                        if ( !match ) { 
     1597                                                anyFound = found = true; 
     1598                                        } else if ( match === true ) { 
     1599                                                continue; 
     1600                                        } 
     1601                                } 
     1602 
     1603                                if ( match ) { 
     1604                                        for ( var i = 0; (item = curLoop[i]) != null; i++ ) { 
     1605                                                if ( item ) { 
     1606                                                        found = filter( item, match, i, curLoop ); 
     1607                                                        var pass = not ^ !!found; 
     1608 
     1609                                                        if ( inplace && found != null ) { 
     1610                                                                if ( pass ) { 
     1611                                                                        anyFound = true; 
     1612                                                                } else { 
     1613                                                                        curLoop[i] = false; 
     1614                                                                } 
     1615                                                        } else if ( pass ) { 
     1616                                                                result.push( item ); 
     1617                                                                anyFound = true; 
     1618                                                        } 
     1619                                                } 
     1620                                        } 
     1621                                } 
     1622 
     1623                                if ( found !== undefined ) { 
     1624                                        if ( !inplace ) { 
     1625                                                curLoop = result; 
     1626                                        } 
     1627 
     1628                                        expr = expr.replace( Expr.match[ type ], "" ); 
     1629 
     1630                                        if ( !anyFound ) { 
     1631                                                return []; 
     1632                                        } 
     1633 
     1634                                        break; 
     1635                                } 
     1636                        } 
     1637                } 
     1638 
     1639                // Improper expression 
     1640                if ( expr == old ) { 
     1641                        if ( anyFound == null ) { 
     1642                                throw "Syntax error, unrecognized expression: " + expr; 
     1643                        } else { 
     1644                                break; 
     1645                        } 
     1646                } 
     1647 
     1648                old = expr; 
     1649        } 
     1650 
     1651        return curLoop; 
     1652}; 
     1653 
     1654var Expr = Sizzle.selectors = { 
     1655        order: [ "ID", "NAME", "TAG" ], 
     1656        match: { 
     1657                ID: /#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/, 
     1658                CLASS: /\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/, 
     1659                NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/, 
     1660                ATTR: /\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, 
     1661                TAG: /^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/, 
     1662                CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, 
     1663                POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, 
     1664                PSEUDO: /:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/ 
     1665        }, 
     1666        attrMap: { 
     1667                "class": "className", 
     1668                "for": "htmlFor" 
     1669        }, 
     1670        attrHandle: { 
     1671                href: function(elem){ 
     1672                        return elem.getAttribute("href"); 
     1673                } 
     1674        }, 
     1675        relative: { 
     1676                "+": function(checkSet, part, isXML){ 
     1677                        var isPartStr = typeof part === "string", 
     1678                                isTag = isPartStr && !/\W/.test(part), 
     1679                                isPartStrNotTag = isPartStr && !isTag; 
     1680 
     1681                        if ( isTag && !isXML ) { 
     1682                                part = part.toUpperCase(); 
     1683                        } 
     1684 
     1685                        for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { 
     1686                                if ( (elem = checkSet[i]) ) { 
     1687                                        while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} 
     1688 
     1689                                        checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ? 
     1690                                                elem || false : 
     1691                                                elem === part; 
     1692                                } 
     1693                        } 
     1694 
     1695                        if ( isPartStrNotTag ) { 
     1696                                Sizzle.filter( part, checkSet, true ); 
     1697                        } 
     1698                }, 
     1699                ">": function(checkSet, part, isXML){ 
     1700                        var isPartStr = typeof part === "string"; 
     1701 
     1702                        if ( isPartStr && !/\W/.test(part) ) { 
     1703                                part = isXML ? part : part.toUpperCase(); 
     1704 
     1705                                for ( var i = 0, l = checkSet.length; i < l; i++ ) { 
     1706                                        var elem = checkSet[i]; 
     1707                                        if ( elem ) { 
     1708                                                var parent = elem.parentNode; 
     1709                                                checkSet[i] = parent.nodeName === part ? parent : false; 
     1710                                        } 
     1711                                } 
     1712                        } else { 
     1713                                for ( var i = 0, l = checkSet.length; i < l; i++ ) { 
     1714                                        var elem = checkSet[i]; 
     1715                                        if ( elem ) { 
     1716                                                checkSet[i] = isPartStr ? 
     1717                                                        elem.parentNode : 
     1718                                                        elem.parentNode === part; 
     1719                                        } 
     1720                                } 
     1721 
     1722                                if ( isPartStr ) { 
     1723                                        Sizzle.filter( part, checkSet, true ); 
     1724                                } 
     1725                        } 
     1726                }, 
     1727                "": function(checkSet, part, isXML){ 
     1728                        var doneName = done++, checkFn = dirCheck; 
     1729 
     1730                        if ( !part.match(/\W/) ) { 
     1731                                var nodeCheck = part = isXML ? part : part.toUpperCase(); 
     1732                                checkFn = dirNodeCheck; 
     1733                        } 
     1734 
     1735                        checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); 
     1736                }, 
     1737                "~": function(checkSet, part, isXML){ 
     1738                        var doneName = done++, checkFn = dirCheck; 
     1739 
     1740                        if ( typeof part === "string" && !part.match(/\W/) ) { 
     1741                                var nodeCheck = part = isXML ? part : part.toUpperCase(); 
     1742                                checkFn = dirNodeCheck; 
     1743                        } 
     1744 
     1745                        checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML); 
     1746                } 
     1747        }, 
     1748        find: { 
     1749                ID: function(match, context, isXML){ 
     1750                        if ( typeof context.getElementById !== "undefined" && !isXML ) { 
     1751                                var m = context.getElementById(match[1]); 
     1752                                return m ? [m] : []; 
     1753                        } 
     1754                }, 
     1755                NAME: function(match, context, isXML){ 
     1756                        if ( typeof context.getElementsByName !== "undefined" ) { 
     1757                                var ret = [], results = context.getElementsByName(match[1]); 
     1758 
     1759                                for ( var i = 0, l = results.length; i < l; i++ ) { 
     1760                                        if ( results[i].getAttribute("name") === match[1] ) { 
     1761                                                ret.push( results[i] ); 
     1762                                        } 
     1763                                } 
     1764 
     1765                                return ret.length === 0 ? null : ret; 
     1766                        } 
     1767                }, 
     1768                TAG: function(match, context){ 
     1769                        return context.getElementsByTagName(match[1]); 
     1770                } 
     1771        }, 
     1772        preFilter: { 
     1773                CLASS: function(match, curLoop, inplace, result, not, isXML){ 
     1774                        match = " " + match[1].replace(/\\/g, "") + " "; 
     1775 
     1776                        if ( isXML ) { 
     1777                                return match; 
     1778                        } 
     1779 
     1780                        for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { 
     1781                                if ( elem ) { 
     1782                                        if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) { 
     1783                                                if ( !inplace ) 
     1784                                                        result.push( elem ); 
     1785                                        } else if ( inplace ) { 
     1786                                                curLoop[i] = false; 
     1787                                        } 
     1788                                } 
     1789                        } 
     1790 
     1791                        return false; 
     1792                }, 
     1793                ID: function(match){ 
     1794                        return match[1].replace(/\\/g, ""); 
     1795                }, 
     1796                TAG: function(match, curLoop){ 
     1797                        for ( var i = 0; curLoop[i] === false; i++ ){} 
     1798                        return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase(); 
     1799                }, 
     1800                CHILD: function(match){ 
     1801                        if ( match[1] == "nth" ) { 
     1802                                // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' 
     1803                                var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( 
     1804                                        match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" || 
     1805                                        !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); 
     1806 
     1807                                // calculate the numbers (first)n+(last) including if they are negative 
     1808                                match[2] = (test[1] + (test[2] || 1)) - 0; 
     1809                                match[3] = test[3] - 0; 
     1810                        } 
     1811 
     1812                        // TODO: Move to normal caching system 
     1813                        match[0] = done++; 
     1814 
     1815                        return match; 
     1816                }, 
     1817                ATTR: function(match, curLoop, inplace, result, not, isXML){ 
     1818                        var name = match[1].replace(/\\/g, ""); 
     1819 
     1820                        if ( !isXML && Expr.attrMap[name] ) { 
     1821                                match[1] = Expr.attrMap[name]; 
     1822                        } 
     1823 
     1824                        if ( match[2] === "~=" ) { 
     1825                                match[4] = " " + match[4] + " "; 
     1826                        } 
     1827 
     1828                        return match; 
     1829                }, 
     1830                PSEUDO: function(match, curLoop, inplace, result, not){ 
     1831                        if ( match[1] === "not" ) { 
     1832                                // If we're dealing with a complex expression, or a simple one 
     1833                                if ( match[3].match(chunker).length > 1 || /^\w/.test(match[3]) ) { 
     1834                                        match[3] = Sizzle(match[3], null, null, curLoop); 
     1835                                } else { 
     1836                                        var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); 
     1837                                        if ( !inplace ) { 
     1838                                                result.push.apply( result, ret ); 
     1839                                        } 
     1840                                        return false; 
     1841                                } 
     1842                        } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { 
     1843                                return true; 
     1844                        } 
     1845 
     1846                        return match; 
     1847                }, 
     1848                POS: function(match){ 
     1849                        match.unshift( true ); 
     1850                        return match; 
     1851                } 
     1852        }, 
     1853        filters: { 
     1854                enabled: function(elem){ 
     1855                        return elem.disabled === false && elem.type !== "hidden"; 
     1856                }, 
     1857                disabled: function(elem){ 
     1858                        return elem.disabled === true; 
     1859                }, 
     1860                checked: function(elem){ 
     1861                        return elem.checked === true; 
     1862                }, 
     1863                selected: function(elem){ 
     1864                        // Accessing this property makes selected-by-default 
     1865                        // options in Safari work properly 
     1866                        elem.parentNode.selectedIndex; 
     1867                        return elem.selected === true; 
     1868                }, 
     1869                parent: function(elem){ 
     1870                        return !!elem.firstChild; 
     1871                }, 
     1872                empty: function(elem){ 
     1873                        return !elem.firstChild; 
     1874                }, 
     1875                has: function(elem, i, match){ 
     1876                        return !!Sizzle( match[3], elem ).length; 
     1877                }, 
     1878                header: function(elem){ 
     1879                        return /h\d/i.test( elem.nodeName ); 
     1880                }, 
     1881                text: function(elem){ 
     1882                        return "text" === elem.type; 
     1883                }, 
     1884                radio: function(elem){ 
     1885                        return "radio" === elem.type; 
     1886                }, 
     1887                checkbox: function(elem){ 
     1888                        return "checkbox" === elem.type; 
     1889                }, 
     1890                file: function(elem){ 
     1891                        return "file" === elem.type; 
     1892                }, 
     1893                password: function(elem){ 
     1894                        return "password" === elem.type; 
     1895                }, 
     1896                submit: function(elem){ 
     1897                        return "submit" === elem.type; 
     1898                }, 
     1899                image: function(elem){ 
     1900                        return "image" === elem.type; 
     1901                }, 
     1902                reset: function(elem){ 
     1903                        return "reset" === elem.type; 
     1904                }, 
     1905                button: function(elem){ 
     1906                        return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON"; 
     1907                }, 
     1908                input: function(elem){ 
     1909                        return /input|select|textarea|button/i.test(elem.nodeName); 
     1910                } 
     1911        }, 
     1912        setFilters: { 
     1913                first: function(elem, i){ 
     1914                        return i === 0; 
     1915                }, 
     1916                last: function(elem, i, match, array){ 
     1917                        return i === array.length - 1; 
     1918                }, 
     1919                even: function(elem, i){ 
     1920                        return i % 2 === 0; 
     1921                }, 
     1922                odd: function(elem, i){ 
     1923                        return i % 2 === 1; 
     1924                }, 
     1925                lt: function(elem, i, match){ 
     1926                        return i < match[3] - 0; 
     1927                }, 
     1928                gt: function(elem, i, match){ 
     1929                        return i > match[3] - 0; 
     1930                }, 
     1931                nth: function(elem, i, match){ 
     1932                        return match[3] - 0 == i; 
     1933                }, 
     1934                eq: function(elem, i, match){ 
     1935                        return match[3] - 0 == i; 
     1936                } 
     1937        }, 
     1938        filter: { 
     1939                PSEUDO: function(elem, match, i, array){ 
     1940                        var name = match[1], filter = Expr.filters[ name ]; 
     1941 
     1942                        if ( filter ) { 
     1943                                return filter( elem, i, match, array ); 
     1944                        } else if ( name === "contains" ) { 
     1945                                return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0; 
     1946                        } else if ( name === "not" ) { 
     1947                                var not = match[3]; 
     1948 
     1949                                for ( var i = 0, l = not.length; i < l; i++ ) { 
     1950                                        if ( not[i] === elem ) { 
     1951                                                return false; 
     1952                                        } 
     1953                                } 
     1954 
     1955                                return true; 
     1956                        } 
     1957                }, 
     1958                CHILD: function(elem, match){ 
     1959                        var type = match[1], node = elem; 
     1960                        switch (type) { 
     1961                                case 'only': 
     1962                                case 'first': 
     1963                                        while (node = node.previousSibling)  { 
     1964                                                if ( node.nodeType === 1 ) return false; 
     1965                                        } 
     1966                                        if ( type == 'first') return true; 
     1967                                        node = elem; 
     1968                                case 'last': 
     1969                                        while (node = node.nextSibling)  { 
     1970                                                if ( node.nodeType === 1 ) return false; 
     1971                                        } 
     1972                                        return true; 
     1973                                case 'nth': 
     1974                                        var first = match[2], last = match[3]; 
     1975 
     1976                                        if ( first == 1 && last == 0 ) { 
     1977                                                return true; 
     1978                                        } 
     1979 
     1980                                        var doneName = match[0], 
     1981                                                parent = elem.parentNode; 
     1982 
     1983                                        if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { 
     1984                                                var count = 0; 
     1985                                                for ( node = parent.firstChild; node; node = node.nextSibling ) { 
     1986                                                        if ( node.nodeType === 1 ) { 
     1987                                                                node.nodeIndex = ++count; 
     1988                                                        } 
     1989                                                } 
     1990                                                parent.sizcache = doneName; 
     1991                                        } 
     1992 
     1993                                        var diff = elem.nodeIndex - last; 
     1994                                        if ( first == 0 ) { 
     1995                                                return diff == 0; 
     1996                                        } else { 
     1997                                                return ( diff % first == 0 && diff / first >= 0 ); 
     1998                                        } 
     1999                        } 
     2000                }, 
     2001                ID: function(elem, match){ 
     2002                        return elem.nodeType === 1 && elem.getAttribute("id") === match; 
     2003                }, 
     2004                TAG: function(elem, match){ 
     2005                        return (match === "*" && elem.nodeType === 1) || elem.nodeName === match; 
     2006                }, 
     2007                CLASS: function(elem, match){ 
     2008                        return (" " + (elem.className || elem.getAttribute("class")) + " ") 
     2009                                .indexOf( match ) > -1; 
     2010                }, 
     2011                ATTR: function(elem, match){ 
     2012                        var name = match[1], 
     2013                                result = Expr.attrHandle[ name ] ? 
     2014                                        Expr.attrHandle[ name ]( elem ) : 
     2015                                        elem[ name ] != null ? 
     2016                                                elem[ name ] : 
     2017                                                elem.getAttribute( name ), 
     2018                                value = result + "", 
     2019                                type = match[2], 
     2020                                check = match[4]; 
     2021 
     2022                        return result == null ? 
     2023                                type === "!=" : 
     2024                                type === "=" ? 
     2025                                value === check : 
     2026                                type === "*=" ? 
     2027                                value.indexOf(check) >= 0 : 
     2028                                type === "~=" ? 
     2029                                (" " + value + " ").indexOf(check) >= 0 : 
     2030                                !check ? 
     2031                                value && result !== false : 
     2032                                type === "!=" ? 
     2033                                value != check : 
     2034                                type === "^=" ? 
     2035                                value.indexOf(check) === 0 : 
     2036                                type === "$=" ? 
     2037                                value.substr(value.length - check.length) === check : 
     2038                                type === "|=" ? 
     2039                                value === check || value.substr(0, check.length + 1) === check + "-" : 
     2040                                false; 
     2041                }, 
     2042                POS: function(elem, match, i, array){ 
     2043                        var name = match[2], filter = Expr.setFilters[ name ]; 
     2044 
     2045                        if ( filter ) { 
     2046                                return filter( elem, i, match, array ); 
     2047                        } 
     2048                } 
     2049        } 
     2050}; 
     2051 
     2052var origPOS = Expr.match.POS; 
     2053 
     2054for ( var type in Expr.match ) { 
     2055        Expr.match[ type ] = RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source ); 
     2056} 
     2057 
     2058var makeArray = function(array, results) { 
     2059        array = Array.prototype.slice.call( array ); 
     2060 
     2061        if ( results ) { 
     2062                results.push.apply( results, array ); 
     2063                return results; 
     2064        } 
     2065 
     2066        return array; 
     2067}; 
     2068 
     2069// Perform a simple check to determine if the browser is capable of 
     2070// converting a NodeList to an array using builtin methods. 
     2071try { 
     2072        Array.prototype.slice.call( document.documentElement.childNodes ); 
     2073 
     2074// Provide a fallback method if it does not work 
     2075} catch(e){ 
     2076        makeArray = function(array, results) { 
     2077                var ret = results || []; 
     2078 
     2079                if ( toString.call(array) === "[object Array]" ) { 
     2080                        Array.prototype.push.apply( ret, array ); 
     2081                } else { 
     2082                        if ( typeof array.length === "number" ) { 
     2083                                for ( var i = 0, l = array.length; i < l; i++ ) { 
     2084                                        ret.push( array[i] ); 
     2085                                } 
     2086                        } else { 
     2087                                for ( var i = 0; array[i]; i++ ) { 
     2088                                        ret.push( array[i] ); 
     2089                                } 
     2090                        } 
     2091                } 
     2092 
     2093                return ret; 
     2094        }; 
     2095} 
     2096 
     2097var sortOrder; 
     2098 
     2099if ( document.documentElement.compareDocumentPosition ) { 
     2100        sortOrder = function( a, b ) { 
     2101                var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; 
     2102                if ( ret === 0 ) { 
     2103                        hasDuplicate = true; 
     2104                } 
     2105                return ret; 
     2106        }; 
     2107} else if ( "sourceIndex" in document.documentElement ) { 
     2108        sortOrder = function( a, b ) { 
     2109                var ret = a.sourceIndex - b.sourceIndex; 
     2110                if ( ret === 0 ) { 
     2111                        hasDuplicate = true; 
     2112                } 
     2113                return ret; 
     2114        }; 
     2115} else if ( document.createRange ) { 
     2116        sortOrder = function( a, b ) { 
     2117                var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); 
     2118                aRange.selectNode(a); 
     2119                aRange.collapse(true); 
     2120                bRange.selectNode(b); 
     2121                bRange.collapse(true); 
     2122                var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange); 
     2123                if ( ret === 0 ) { 
     2124                        hasDuplicate = true; 
     2125                } 
     2126                return ret; 
     2127        }; 
     2128} 
     2129 
     2130// Check