/*



 * jQuery JavaScript Library v1.3.2



 * http://jquery.com/



 *



 * Copyright (c) 2009 John Resig



 * Dual licensed under the MIT and GPL licenses.



 * http://docs.jquery.com/License



 *



 * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)



 * Revision: 6246



 */



(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});



/*



 * Sizzle CSS Selector Engine - v0.9.3



 *  Copyright 2009, The Dojo Foundation



 *  Released under the MIT, BSD, and GPL Licenses.



 *  More information: http://sizzlejs.com/



 */



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





/**



 * Tabs - jQuery plugin for accessible, unobtrusive tabs



 * @requires jQuery v1.1.1



 *



 * http://stilbuero.de/tabs/



 *



 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)



 * Dual licensed under the MIT and GPL licenses:



 * http://www.opensource.org/licenses/mit-license.php



 * http://www.gnu.org/licenses/gpl.html



 *



 * Version: 2.7.4



 */







(function($) { // block scope







$.extend({



    tabs: {



        remoteCount: 0 // TODO in Tabs 3 this is going to be more cleanly in one single namespace



    }



});







/**



 * Create an accessible, unobtrusive tab interface based on a particular HTML structure.



 *



 * The underlying HTML has to look like this:



 *



 * <div id="container">



 *     <ul>



 *         <li><a href="#fragment-1">Section 1</a></li>



 *         <li><a href="#fragment-2">Section 2</a></li>



 *         <li><a href="#fragment-3">Section 3</a></li>



 *     </ul>



 *     <div id="fragment-1">



 *



 *     </div>



 *     <div id="fragment-2">



 *



 *     </div>



 *     <div id="fragment-3">



 *



 *     </div>



 * </div>



 *



 * Each anchor in the unordered list points directly to a section below represented by one of the



 * divs (the URI in the anchor's href attribute refers to the fragment with the corresponding id).



 * Because such HTML structure is fully functional on its own, e.g. without JavaScript, the tab



 * interface is accessible and unobtrusive.



 *



 * A tab is also bookmarkable via hash in the URL. Use the History/Remote plugin (Tabs will



 * auto-detect its presence) to fix the back (and forward) button.



 *



 * @example $('#container').tabs();



 * @desc Create a basic tab interface.



 * @example $('#container').tabs(2);



 * @desc Create a basic tab interface with the second tab initially activated.



 * @example $('#container').tabs({disabled: [3, 4]});



 * @desc Create a tab interface with the third and fourth tab being disabled.



 * @example $('#container').tabs({fxSlide: true});



 * @desc Create a tab interface that uses slide down/up animations for showing/hiding tab



 *       content upon tab switching.



 *



 * @param Number initial An integer specifying the position of the tab (no zero-based index) that



 *                       gets activated at first (on page load). Two alternative ways to specify



 *                       the active tab will overrule this argument. First a li element



 *                       (representing one single tab) belonging to the selected tab class, e.g.



 *                       set the selected tab class (default: "tabs-selected", see option



 *                       selectedClass) for one of the unordered li elements in the HTML source.



 *                       In addition if a fragment identifier/hash in the URL of the page refers



 *                       to the id of a tab container of a tab interface the corresponding tab will



 *                       be activated and both the initial argument as well as an eventually



 *                       declared class attribute will be overruled. Defaults to 1 if omitted.



 * @param Object settings An object literal containing key/value pairs to provide optional settings.



 * @option Array<Number> disabled An array containing the position of the tabs (no zero-based index)



 *                                that should be disabled on initialization. Default value: null.



 *                                A tab can also be disabled by simply adding the disabling class



 *                                (default: "tabs-disabled", see option disabledClass) to the li



 *                                element representing that particular tab.



 * @option Boolean bookmarkable Boolean flag indicating if support for bookmarking and history (via



 *                              changing hash in the URL of the browser) is enabled. Default value:



 *                              false, unless the History/Remote plugin is included. In that case the



 *                              default value becomes true. @see $.ajaxHistory.initialize



 * @option Boolean remote Boolean flag indicating that tab content has to be loaded remotely from



 *                        the url given in the href attribute of the tab menu anchor elements.



 * @option String spinner The content of this string is shown in a tab while remote content is loading.



 *                        Insert plain text as well as an img here. To turn off this notification



 *                        pass an empty string or null. Default: "Loading&#8230;".



 * @option String hashPrefix A String that is used for constructing the hash the link's href attribute



 *                           of a remote tab gets altered to, such as "#remote-1".



 *                           Default value: "remote-tab-".



 * @option Boolean fxFade Boolean flag indicating whether fade in/out animations are used for tab



 *                        switching. Can be combined with fxSlide. Will overrule fxShow/fxHide.



 *                        Default value: false.



 * @option Boolean fxSlide Boolean flag indicating whether slide down/up animations are used for tab



 *                         switching. Can be combined with fxFade. Will overrule fxShow/fxHide.



 *                         Default value: false.



 * @option String|Number fxSpeed A string representing one of the three predefined speeds ("slow",



 *                               "normal", or "fast") or the number of milliseconds (e.g. 1000) to



 *                               run an animation. Default value: "normal".



 * @option Object fxShow An object literal of the form jQuery's animate function expects for making



 *                       your own, custom animation to reveal a tab upon tab switch. Unlike fxFade



 *                       or fxSlide this animation is independent from an optional hide animation.



 *                       Default value: null. @see animate



 * @option Object fxHide An object literal of the form jQuery's animate function expects for making



 *                       your own, custom animation to hide a tab upon tab switch. Unlike fxFade



 *                       or fxSlide this animation is independent from an optional show animation.



 *                       Default value: null. @see animate



 * @option String|Number fxShowSpeed A string representing one of the three predefined speeds



 *                                   ("slow", "normal", or "fast") or the number of milliseconds



 *                                   (e.g. 1000) to run the animation specified in fxShow.



 *                                   Default value: fxSpeed.



 * @option String|Number fxHideSpeed A string representing one of the three predefined speeds



 *                                   ("slow", "normal", or "fast") or the number of milliseconds



 *                                   (e.g. 1000) to run the animation specified in fxHide.



 *                                   Default value: fxSpeed.



 * @option Boolean fxAutoHeight Boolean flag that if set to true causes all tab heights



 *                              to be constant (being the height of the tallest tab).



 *                              Default value: false.



 * @option Function onClick A function to be invoked upon tab switch, immediatly after a tab has



 *                          been clicked, e.g. before the other's tab content gets hidden. The



 *                          function gets passed three arguments: the first one is the clicked



 *                          tab (e.g. an anchor element), the second one is the DOM element



 *                          containing the content of the clicked tab (e.g. the div), the third



 *                          argument is the one of the tab that gets hidden. If this callback



 *                          returns false, the tab switch is canceled (use to disallow tab



 *                          switching for the reason of a failed form validation for example).



 *                          Default value: null.



 * @option Function onHide A function to be invoked upon tab switch, immediatly after one tab's



 *                         content got hidden (with or without an animation) and right before the



 *                         next tab is revealed. The function gets passed three arguments: the



 *                         first one is the clicked tab (e.g. an anchor element), the second one



 *                         is the DOM element containing the content of the clicked tab, (e.g. the



 *                         div), the third argument is the one of the tab that gets hidden.



 *                         Default value: null.



 * @option Function onShow A function to be invoked upon tab switch. This function is invoked



 *                         after the new tab has been revealed, e.g. after the switch is completed.



 *                         The function gets passed three arguments: the first one is the clicked



 *                         tab (e.g. an anchor element), the second one is the DOM element



 *                         containing the content of the clicked tab, (e.g. the div), the third



 *                         argument is the one of the tab that gets hidden. Default value: null.



 * @option String navClass A CSS class that is used to identify the tabs unordered list by class if



 *                         the required HTML structure differs from the default one.



 *                         Default value: "tabs-nav".



 * @option String selectedClass The CSS class attached to the li element representing the



 *                              currently selected (active) tab. Default value: "tabs-selected".



 * @option String disabledClass The CSS class attached to the li element representing a disabled



 *                              tab. Default value: "tabs-disabled".



 * @option String containerClass A CSS class that is used to identify tab containers by class if



 *                               the required HTML structure differs from the default one.



 *                               Default value: "tabs-container".



 * @option String hideClass The CSS class used for hiding inactive tabs. A class is used instead



 *                          of "display: none" in the style attribute to maintain control over



 *                          visibility in other media types than screen, most notably print.



 *                          Default value: "tabs-hide".



 * @option String loadingClass The CSS class used for indicating that an Ajax tab is currently



 *                             loading, for example by showing a spinner.



 *                             Default value: "tabs-loading".



 * @option String tabStruct @deprecated A CSS selector or basic XPath expression reflecting a



 *                          nested HTML structure that is different from the default single div



 *                          structure (one div with an id inside the overall container holds one



 *                          tab's content). If for instance an additional div is required to wrap



 *                          up the several tab containers such a structure is expressed by "div>div".



 *                          Default value: "div".



 * @type jQuery



 *



 * @name tabs



 * @cat Plugins/Tabs



 * @author Klaus Hartl/klaus.hartl@stilbuero.de



 */



$.fn.tabs = function(initial, settings) {







    // settings



    if (typeof initial == 'object') settings = initial; // no initial tab given but a settings object



    settings = $.extend({



        initial: (initial && typeof initial == 'number' && initial > 0) ? --initial : 0,



        disabled: null,



        bookmarkable: $.ajaxHistory ? true : false,



        remote: false,



        spinner: 'Loading&#8230;',



        hashPrefix: 'remote-tab-',



        fxFade: null,



        fxSlide: null,



        fxShow: null,



        fxHide: null,



        fxSpeed: 'normal',



        fxShowSpeed: null,



        fxHideSpeed: null,





        fxAutoHeight: false,



        onClick: null,



        onHide: null,



        onShow: null,



        navClass: 'tabs-nav',



        selectedClass: 'tabs-selected',



        disabledClass: 'tabs-disabled',



        containerClass: 'tabs-container',



        hideClass: 'tabs-hide',



        loadingClass: 'tabs-loading',



        tabStruct: 'div'



    }, settings || {});







    $.browser.msie6 = $.browser.msie && ($.browser.version && $.browser.version < 7 || /MSIE 6.0/.test(navigator.userAgent)); // do not check for 6.0 alone, userAgent in Windows Vista has "Windows NT 6.0"







    // helper to prevent scroll to fragment



    function unFocus() {



        scrollTo(0, 0);



    }







    // initialize tabs



    return this.each(function() {







        // remember wrapper for later



        var container = this;







        // setup nav



        var nav = $('ul.' + settings.navClass, container);



        nav = nav.size() && nav || $('>ul:eq(0)', container); // fallback to default structure



        var tabs = $('a', nav);







        // prepare remote tabs



        if (settings.remote) {



            tabs.each(function() {



                var id = settings.hashPrefix + (++$.tabs.remoteCount), hash = '#' + id, url = this.href;



                this.href = hash;



                $('<div id="' + id + '" class="' + settings.containerClass + '"></div>').appendTo(container);







                $(this).bind('loadRemoteTab', function(e, callback) {



                    var $$ = $(this).addClass(settings.loadingClass), span = $('span', this)[0], tabTitle = span.innerHTML;



                    if (settings.spinner) {



                        // TODO if spinner is image



                        span.innerHTML = '<em>' + settings.spinner + '</em>'; // WARNING: html(...) crashes Safari with jQuery 1.1.2



                    }



                    setTimeout(function() { // Timeout is again required in IE, "wait" for id being restored



                        $(hash).load(url, function() {



                            if (settings.spinner) {



                                span.innerHTML = tabTitle; // WARNING: html(...) crashes Safari with jQuery 1.1.2

                            }



                            $$.removeClass(settings.loadingClass);



                            callback && callback();



                        });



                    }, 0);



                });







            });



        }







        // set up containers



        var containers = $('div.' + settings.containerClass, container);



        containers = containers.size() && containers || $('>' + settings.tabStruct, container); // fallback to default structure







        // attach classes for styling if not present



        nav.is('.' + settings.navClass) || nav.addClass(settings.navClass);



        containers.each(function() {



            var $$ = $(this);



            $$.is('.' + settings.containerClass) || $$.addClass(settings.containerClass);



        });







        // try to retrieve active tab from class in HTML



        var hasSelectedClass = $('li', nav).index( $('li.' + settings.selectedClass, nav)[0] );



        if (hasSelectedClass >= 0) {



           settings.initial = hasSelectedClass;



        }







        // try to retrieve active tab from hash in url, will override class in HTML



        if (location.hash) {



            tabs.each(function(i) {



                if (this.hash == location.hash) {



                    settings.initial = i;



                    // prevent page scroll to fragment



                    if (($.browser.msie || $.browser.opera) && !settings.remote) {



                        var toShow = $(location.hash);



                        var toShowId = toShow.attr('id');



                        toShow.attr('id', '');



                        setTimeout(function() {



                            toShow.attr('id', toShowId); // restore id



                        }, 500);



                    }



                    unFocus();



                    return false; // break



                }



            });



        }



        if ($.browser.msie) {



            unFocus(); // fix IE focussing bottom of the page for some unknown reason



        }







        // highlight tab accordingly



        containers.filter(':eq(' + settings.initial + ')').show().end().not(':eq(' + settings.initial + ')').addClass(settings.hideClass);



        $('li', nav).removeClass(settings.selectedClass).eq(settings.initial).addClass(settings.selectedClass); // we need to remove classes eventually if hash takes precedence over class



        // trigger load of initial tab



        tabs.eq(settings.initial).trigger('loadRemoteTab').end();







        // setup auto height



        if (settings.fxAutoHeight) {



            // helper



            var _setAutoHeight = function(reset) {



                // get tab heights in top to bottom ordered array



                var heights = $.map(containers.get(), function(el) {



                    var h, jq = $(el);



                    if (reset) {



                        if ($.browser.msie6) {



                            el.style.removeExpression('behaviour');



                            el.style.height = '';



                            el.minHeight = null;



                        }



                        h = jq.css({'min-height': ''}).height(); // use jQuery's height() to get hidden element values



                    } else {



                        h = jq.height(); // use jQuery's height() to get hidden element values



                    }



                    return h;



                }).sort(function(a, b) {



                    return b - a;



                });



                if ($.browser.msie6) {



                    containers.each(function() {



                        this.minHeight = heights[0] + 'px';



                        this.style.setExpression('behaviour', 'this.style.height = this.minHeight ? this.minHeight : "1px"'); // using an expression to not make print styles useless



                    });



                } else {



                    containers.css({'min-height': heights[0] + 'px'});



                }



            };



            // call once for initialization



            _setAutoHeight();



            // trigger auto height adjustment if needed



            var cachedWidth = container.offsetWidth;



            var cachedHeight = container.offsetHeight;



            var watchFontSize = $('#tabs-watch-font-size').get(0) || $('<span id="tabs-watch-font-size">M</span>').css({display: 'block', position: 'absolute', visibility: 'hidden'}).appendTo(document.body).get(0);



            var cachedFontSize = watchFontSize.offsetHeight;



            setInterval(function() {



                var currentWidth = container.offsetWidth;



                var currentHeight = container.offsetHeight;



                var currentFontSize = watchFontSize.offsetHeight;



                if (currentHeight > cachedHeight || currentWidth != cachedWidth || currentFontSize != cachedFontSize) {



                    _setAutoHeight((currentWidth > cachedWidth || currentFontSize < cachedFontSize)); // if heights gets smaller reset min-height



                    cachedWidth = currentWidth;



                    cachedHeight = currentHeight;



                    cachedFontSize = currentFontSize;



                }



            }, 50);



        }







        // setup animations



        var showAnim = {}, hideAnim = {}, showSpeed = settings.fxShowSpeed || settings.fxSpeed, hideSpeed = settings.fxHideSpeed || settings.fxSpeed;



        if (settings.fxSlide || settings.fxFade) {



            if (settings.fxSlide) {



                showAnim['height'] = 'show';



                hideAnim['height'] = 'hide';



            }



            if (settings.fxFade) {



                showAnim['opacity'] = 'show';



                hideAnim['opacity'] = 'hide';



            }



        } else {



            if (settings.fxShow) {



                showAnim = settings.fxShow;



            } else { // use some kind of animation to prevent browser scrolling to the tab



                showAnim['min-width'] = 0; // avoid opacity, causes flicker in Firefox



                showSpeed = 1; // as little as 1 is sufficient



            }



            if (settings.fxHide) {



                hideAnim = settings.fxHide;



            } else { // use some kind of animation to prevent browser scrolling to the tab



                hideAnim['min-width'] = 0; // avoid opacity, causes flicker in Firefox



                hideSpeed = 1; // as little as 1 is sufficient



            }



        }







        // callbacks



        var onClick = settings.onClick, onHide = settings.onHide, onShow = settings.onShow;







        // attach activateTab event, required for activating a tab programmatically



        tabs.bind('triggerTab', function() {







            // if the tab is already selected or disabled or animation is still running stop here



            var li = $(this).parents('li:eq(0)');



            if (container.locked || li.is('.' + settings.selectedClass) || li.is('.' + settings.disabledClass)) {



                return false;



            }







            var hash = this.hash;







            if ($.browser.msie) {







                $(this).trigger('click');



                if (settings.bookmarkable) {



                    $.ajaxHistory.update(hash);



                    location.hash = hash.replace('#', '');



                }







            } else if ($.browser.safari) {







                // Simply setting location.hash puts Safari into the eternal load state... ugh! Submit a form instead.



                var tempForm = $('<form action="' + hash + '"><div><input type="submit" value="h" /></div></form>').get(0); // no need to append it to the body



                tempForm.submit(); // does not trigger the form's submit event...



                $(this).trigger('click'); // ...thus do stuff here



                if (settings.bookmarkable) {



                    $.ajaxHistory.update(hash);



                }







            } else {







                if (settings.bookmarkable) {



                    location.hash = hash.replace('#', '');



                } else {



                    $(this).trigger('click');



                }







            }







        });







        // attach disable event, required for disabling a tab



        tabs.bind('disableTab', function() {



            var li = $(this).parents('li:eq(0)');



            if ($.browser.safari) { /* fix opacity of tab after disabling in Safari... */



                li.animate({ opacity: 0 }, 1, function() {



                   li.css({opacity: ''});



                });



            }



            li.addClass(settings.disabledClass);







        });







        // disabled from settings



        if (settings.disabled && settings.disabled.length) {



            for (var i = 0, k = settings.disabled.length; i < k; i++) {



                tabs.eq(--settings.disabled[i]).trigger('disableTab').end();



            }



        };







        // attach enable event, required for reenabling a tab



        tabs.bind('enableTab', function() {



            var li = $(this).parents('li:eq(0)');



            li.removeClass(settings.disabledClass);



            if ($.browser.safari) { /* fix disappearing tab after enabling in Safari... */



                li.animate({ opacity: 1 }, 1, function() {



                    li.css({opacity: ''});



                });



            }



        });







        // attach click event



        tabs.bind('click', function(e) {







            var trueClick = e.clientX; // add to history only if true click occured, not a triggered click



            var clicked = this, li = $(this).parents('li:eq(0)'), toShow = $(this.hash), toHide = containers.filter(':visible');







            // if animation is still running, tab is selected or disabled or onClick callback returns false stop here



            // check if onClick returns false last so that it is not executed for a disabled tab



            if (container['locked'] || li.is('.' + settings.selectedClass) || li.is('.' + settings.disabledClass) || typeof onClick == 'function' && onClick(this, toShow[0], toHide[0]) === false) {



                this.blur();



                return false;



            }







            container['locked'] = true;







            // show new tab



            if (toShow.size()) {







                // prevent scrollbar scrolling to 0 and than back in IE7, happens only if bookmarking/history is enabled



                if ($.browser.msie && settings.bookmarkable) {



                    var toShowId = this.hash.replace('#', '');



                    toShow.attr('id', '');



                    setTimeout(function() {



                        toShow.attr('id', toShowId); // restore id



                    }, 0);



                }







                var resetCSS = { display: '', overflow: '', height: '' };



                if (!$.browser.msie) { // not in IE to prevent ClearType font issue



                    resetCSS['opacity'] = '';



                }



                



                // switch tab, animation prevents browser scrolling to the fragment



                function switchTab() {



                    if (settings.bookmarkable && trueClick) { // add to history only if true click occured, not a triggered click



                        $.ajaxHistory.update(clicked.hash);



                    }



                    toHide.animate(hideAnim, hideSpeed, function() { //



                        $(clicked).parents('li:eq(0)').addClass(settings.selectedClass).siblings().removeClass(settings.selectedClass);



                        toHide.addClass(settings.hideClass).css(resetCSS); // maintain flexible height and accessibility in print etc.                        



                        if (typeof onHide == 'function') {



                            onHide(clicked, toShow[0], toHide[0]);



                        }



                        if (!(settings.fxSlide || settings.fxFade || settings.fxShow)) {



                            toShow.css('display', 'block'); // prevent occasionally occuring flicker in Firefox cause by gap between showing and hiding the tab containers



                        }



                        toShow.animate(showAnim, showSpeed, function() {



                            toShow.removeClass(settings.hideClass).css(resetCSS); // maintain flexible height and accessibility in print etc.



                            if ($.browser.msie) {



                                toHide[0].style.filter = '';



                                toShow[0].style.filter = '';



                            }



                            if (typeof onShow == 'function') {



                                onShow(clicked, toShow[0], toHide[0]);



                            }



                            container['locked'] = null;



                        });



                    });



                }







                if (!settings.remote) {



                    switchTab();



                } else {



                    $(clicked).trigger('loadRemoteTab', [switchTab]);



                }







            } else {



                alert('There is no such container.');



            }







            // Set scrollbar to saved position - need to use timeout with 0 to prevent browser scroll to target of hash



            var scrollX = window.pageXOffset || document.documentElement && document.documentElement.scrollLeft || document.body.scrollLeft || 0;



            var scrollY = window.pageYOffset || document.documentElement && document.documentElement.scrollTop || document.body.scrollTop || 0;





            setTimeout(function() {



                window.scrollTo(scrollX, scrollY);



            }, 0);







            this.blur(); // prevent IE from keeping other link focussed when using the back button







            return settings.bookmarkable && !!trueClick; // convert undefined to Boolean for IE







        });







        // enable history support if bookmarking and history is turned on



        if (settings.bookmarkable) {



            $.ajaxHistory.initialize(function() {



                tabs.eq(settings.initial).trigger('click').end();



            });



        }







    });







};







/**



 * Activate a tab programmatically with the given position (no zero-based index)



 * or its id, e.g. the URL's fragment identifier/hash representing a tab, as if the tab



 * itself were clicked.



 *



 * @example $('#container').triggerTab(2);



 * @desc Activate the second tab of the tab interface contained in <div id="container">.



 * @example $('#container').triggerTab(1);



 * @desc Activate the first tab of the tab interface contained in <div id="container">.



 * @example $('#container').triggerTab();



 * @desc Activate the first tab of the tab interface contained in <div id="container">.



 * @example $('#container').triggerTab('fragment-2');



 * @desc Activate a tab via its URL fragment identifier representation.



 *



 * @param String|Number tab Either a string that matches the id of the tab (the URL's



 *                          fragment identifier/hash representing a tab) or an integer



 *                          specifying the position of the tab (no zero-based index) to



 *                          be activated. If this parameter is omitted, the first tab



 *                          will be activated.



 * @type jQuery



 *



 * @name triggerTab



 * @cat Plugins/Tabs



 * @author Klaus Hartl/klaus.hartl@stilbuero.de



 */







/**



 * Disable a tab, so that clicking it has no effect.



 *



 * @example $('#container').disableTab(2);



 * @desc Disable the second tab of the tab interface contained in <div id="container">.



 *



 * @param String|Number tab Either a string that matches the id of the tab (the URL's



 *                          fragment identifier/hash representing a tab) or an integer



 *                          specifying the position of the tab (no zero-based index) to



 *                          be disabled. If this parameter is omitted, the first tab



 *                          will be disabled.



 * @type jQuery



 *



 * @name disableTab



 * @cat Plugins/Tabs



 * @author Klaus Hartl/klaus.hartl@stilbuero.de



 */







/**



 * Enable a tab that has been disabled.



 *



 * @example $('#container').enableTab(2);



 * @desc Enable the second tab of the tab interface contained in <div id="container">.



 *



 * @param String|Number tab Either a string that matches the id of the tab (the URL's



 *                          fragment identifier/hash representing a tab) or an integer



 *                          specifying the position of the tab (no zero-based index) to



 *                          be enabled. If this parameter is omitted, the first tab



 *                          will be enabled.



 * @type jQuery



 *



 * @name enableTab



 * @cat Plugins/Tabs



 * @author Klaus Hartl/klaus.hartl@stilbuero.de



 */







var tabEvents = ['triggerTab', 'disableTab', 'enableTab'];



for (var i = 0; i < tabEvents.length; i++) {



    $.fn[tabEvents[i]] = (function(tabEvent) {



        return function(tab) {



            return this.each(function() {



                var nav = $('ul.tabs-nav' , this);



                nav = nav.size() && nav || $('>ul:eq(0)', this); // fallback to default structure



                var a;



                if (!tab || typeof tab == 'number') {



                    a = $('li a', nav).eq((tab && tab > 0 && tab - 1 || 0)); // fall back to 0



                } else if (typeof tab == 'string') {



                    a = $('li a[@href$="#' + tab + '"]', nav);



                }



                a.trigger(tabEvent);



            });



        };



    })(tabEvents[i]);



}







/**



 * Get the position of the currently selected tab (no zero-based index).



 *



 * @example $('#container').activeTab();



 * @desc Get the position of the currently selected tab of an interface



 * contained in <div id="container">.



 *



 * @type Number



 *



 * @name activeTab



 * @cat Plugins/Tabs



 * @author Klaus Hartl/klaus.hartl@stilbuero.de



 */







$.fn.activeTab = function() {



    var selectedTabs = [];



    this.each(function() {



        var nav = $('ul.tabs-nav' , this);



        nav = nav.size() && nav || $('>ul:eq(0)', this); //fallback to default structure



        var lis = $('li', nav);



        selectedTabs.push(lis.index( lis.filter('.tabs-selected')[0] ) + 1);



    });



    return selectedTabs[0];



};







})(jQuery);



(function(a){a.fn.lavaLamp=function(b){b=a.extend({fx:"swing",speed:500,click:function(){return true},startItem:"no",autoReturn:true,returnDelay:0,setOnClick:true,homeTop:0,homeLeft:0,homeWidth:0,homeHeight:0,returnHome:false},b||{});return this.each(function(){var h=location.pathname+location.search+location.hash;var e=new Object;var d;var i;var f;var g;if(b.homeTop||b.homeLeft){f=a('<li class="homeLava selectedLava"></li>').css({left:b.homeLeft,top:b.homeTop,width:b.homeWidth,height:b.homeHeight,position:"absolute"});a(this).prepend(f)}var j=a("li",this);if(b.startItem=="no"){e=a('li a[href$="'+h+'"]',this).parent("li")}if(e.length==0&&b.startItem=="no"&&location.hash){e=a('li a[href$="'+location.hash+'"]',this).parent("li")}if(e.length==0||b.startItem!="no"){if(b.startItem=="no"){b.startItem=0}e=a(j[b.startItem])}g=a("li.selectedLava",this)[0]||a(e).addClass("selectedLava")[0];j.mouseover(function(){if(a(this).hasClass("homeLava")){g=a(this)[0]}c(this)});i=a('<li class="backLava"><div class="leftLava"></div><div class="bottomLava"></div><div class="cornerLava"></div></li>').appendTo(this);a(this).mouseout(function(){if(b.autoReturn){if(b.returnHome&&f){c(f[0])}else{if(b.returnDelay){if(d){clearTimeout(d)}d=setTimeout(c,b.returnDelay+b.speed)}else{c()}}}});j.click(function(k){if(b.setOnClick){a(g).removeClass("selectedLava");a(this).addClass("selectedLava");g=this}return b.click.apply(this,[k,this])});if(b.homeTop||b.homeLeft){i.css({left:b.homeLeft,top:b.homeTop,width:b.homeWidth,height:b.homeHeight})}else{i.css({left:g.offsetLeft,top:g.offsetTop,width:g.offsetWidth,height:g.offsetHeight})}function c(k){if(!k){k=g}var m=0,l=0;if(!a.browser.msie){m=(i.outerWidth()-i.innerWidth())/2;l=(i.outerHeight()-i.innerHeight())/2}i.stop().animate({left:k.offsetLeft-m,top:k.offsetTop-l,width:k.offsetWidth,height:k.offsetHeight},b.speed,b.fx)}})}})(jQuery);



/**

 * History/Remote - jQuery plugin for enabling history support and bookmarking

 * @requires jQuery v1.0.3

 *

 * http://stilbuero.de/jquery/history/

 *

 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)

 * Dual licensed under the MIT and GPL licenses:

 * http://www.opensource.org/licenses/mit-license.php

 * http://www.gnu.org/licenses/gpl.html

 *

 * Version: 0.2.3

 */

eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(2($){$.D=16 2(){4 c=\'15\';4 k=7.6;4 d=z;4 g;5.o=2(){};4 h=2(){$(\'.x-R\').1i()};$(8).K(c,h);3($.v.19){4 e,p=q;$(2(){e=$(\'<H 13="12: Z;"></H>\').E(8.U).1o(0);4 a=e.C.8;a.P();a.M();3(k&&k!=\'#\'){a.7.6=k.B(\'#\',\'\')}});5.o=2(a){k=a;4 b=e.C.8;b.P();b.M();b.7.6=a.B(\'#\',\'\')};g=2(){4 a=e.C.8;4 b=a.7.6;3(b!=k){k=b;3(b&&b!=\'#\'){$(\'a[@l$="\'+b+\'"]\').m();7.6=b}n 3(p){7.6=\'\';$(8).u(c)}}p=A}}n 3($.v.18||$.v.17){5.o=2(a){k=a};g=2(){3(7.6){3(k!=7.6){k=7.6;$(\'a[@l$="\'+k+\'"]\').m()}}n 3(k){k=\'\';$(8).u(c)}}}n 3($.v.14){4 f,r,t;$(2(){f=[];f.9=y.9;r=[]});4 j=q,p=q;t=2(a){f.G(a);r.9=0;j=q};5.o=2(a){k=a;t(k)};g=2(){4 b=y.9-f.9;3(b){j=q;3(b<0){F(4 i=0;i<11.10(b);i++)r.Y(f.X())}n{F(4 i=0;i<b;i++)f.G(r.W())}4 a=f[f.9-1];$(\'a[@l$="\'+a+\'"]\').m();k=7.6}n 3(f[f.9-1]==T&&!j){3(8.S.1n(\'#\')>=0){$(\'a[@l$="\'+\'#\'+8.S.1m(\'#\')[1]+\'"]\').m()}n 3(p){$(8).u(c)}j=A}p=A}}5.1l=2(a){3(w a==\'2\'){$(8).1k(c,h).K(c,a)}3(7.6&&w t==\'T\'){$(\'a[@l$="\'+7.6+\'"]\').u(\'m\')}3(g&&d==z){d=1j(g,1h)}}};$.Q.x=2(g,f,c){c=c||2(){};3(w f==\'2\'){c=f}f=$.1g({O:\'x-\'},f||{});4 d=$(g).1f()&&$(g)||$(\'<I></I>\').E(\'U\');d.1e(\'x-R\');L 5.1d(2(i){4 a=5.l;4 b=\'#\'+(5.N&&5.N.B(/\\s/g,\'1c\')||f.O+(i+1));5.l=b;$(5).m(2(e){3(!d[\'J\']){3(e.V){$.D.o(b)}d.1b(a,2(){d[\'J\']=z;c()})}})})};$.Q.y=2(a){L 5.m(2(e){3(e.V){$.D.o(5.6)}w a==\'2\'&&a()})}})(1a);',62,87,'||function|if|var|this|hash|location|document|length||||||||||||href|click|else|update|initialized|false|_forwardStack||_addHistory|trigger|browser|typeof|remote|history|null|true|replace|contentWindow|ajaxHistory|appendTo|for|push|iframe|div|locked|bind|return|close|title|hashPrefix|open|fn|output|URL|undefined|body|clientX|shift|pop|unshift|none|abs|Math|display|style|safari|historyReset|new|opera|mozilla|msie|jQuery|load|_|each|addClass|size|extend|200|empty|setInterval|unbind|initialize|split|indexOf|get'.split('|'),0,{}))





/*



 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/



 *



 * Uses the built In easIng capabilities added In jQuery 1.1



 * to offer multiple easIng options



 *



 * Copyright (c) 2007 George Smith



 * Licensed under the MIT License:



 *   http://www.opensource.org/licenses/mit-license.php



 */







// t: current time, b: begInnIng value, c: change In value, d: duration



jQuery.easing['jswing'] = jQuery.easing['swing'];







jQuery.extend( jQuery.easing,



{



	def: 'easeOutQuad',



	swing: function (x, t, b, c, d) {



		//alert(jQuery.easing.default);



		return jQuery.easing[jQuery.easing.def](x, t, b, c, d);



	},



	easeInQuad: function (x, t, b, c, d) {



		return c*(t/=d)*t + b;



	},



	easeOutQuad: function (x, t, b, c, d) {



		return -c *(t/=d)*(t-2) + b;



	},



	easeInOutQuad: function (x, t, b, c, d) {



		if ((t/=d/2) < 1) return c/2*t*t + b;



		return -c/2 * ((--t)*(t-2) - 1) + b;



	},



	easeInCubic: function (x, t, b, c, d) {



		return c*(t/=d)*t*t + b;



	},



	easeOutCubic: function (x, t, b, c, d) {



		return c*((t=t/d-1)*t*t + 1) + b;



	},



	easeInOutCubic: function (x, t, b, c, d) {



		if ((t/=d/2) < 1) return c/2*t*t*t + b;



		return c/2*((t-=2)*t*t + 2) + b;



	},



	easeInQuart: function (x, t, b, c, d) {



		return c*(t/=d)*t*t*t + b;



	},



	easeOutQuart: function (x, t, b, c, d) {



		return -c * ((t=t/d-1)*t*t*t - 1) + b;



	},



	easeInOutQuart: function (x, t, b, c, d) {



		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;



		return -c/2 * ((t-=2)*t*t*t - 2) + b;



	},



	easeInQuint: function (x, t, b, c, d) {



		return c*(t/=d)*t*t*t*t + b;



	},



	easeOutQuint: function (x, t, b, c, d) {



		return c*((t=t/d-1)*t*t*t*t + 1) + b;



	},



	easeInOutQuint: function (x, t, b, c, d) {



		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;



		return c/2*((t-=2)*t*t*t*t + 2) + b;



	},



	easeInSine: function (x, t, b, c, d) {



		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;



	},



	easeOutSine: function (x, t, b, c, d) {



		return c * Math.sin(t/d * (Math.PI/2)) + b;



	},



	easeInOutSine: function (x, t, b, c, d) {



		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;



	},



	easeInExpo: function (x, t, b, c, d) {



		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;



	},



	easeOutExpo: function (x, t, b, c, d) {



		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;



	},



	easeInOutExpo: function (x, t, b, c, d) {



		if (t==0) return b;



		if (t==d) return b+c;



		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;



		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;



	},



	easeInCirc: function (x, t, b, c, d) {



		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;



	},



	easeOutCirc: function (x, t, b, c, d) {



		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;



	},



	easeInOutCirc: function (x, t, b, c, d) {



		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;



		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;



	},



	easeInElastic: function (x, t, b, c, d) {



		var s=1.70158;var p=0;var a=c;



		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;



		if (a < Math.abs(c)) { a=c; var s=p/4; }



		else var s = p/(2*Math.PI) * Math.asin (c/a);



		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;



	},



	easeOutElastic: function (x, t, b, c, d) {



		var s=1.70158;var p=0;var a=c;



		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;



		if (a < Math.abs(c)) { a=c; var s=p/4; }



		else var s = p/(2*Math.PI) * Math.asin (c/a);



		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;



	},



	easeInOutElastic: function (x, t, b, c, d) {



		var s=1.70158;var p=0;var a=c;



		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);



		if (a < Math.abs(c)) { a=c; var s=p/4; }



		else var s = p/(2*Math.PI) * Math.asin (c/a);



		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;



		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;



	},



	easeInBack: function (x, t, b, c, d, s) {



		if (s == undefined) s = 1.70158;



		return c*(t/=d)*t*((s+1)*t - s) + b;



	},



	easeOutBack: function (x, t, b, c, d, s) {



		if (s == undefined) s = 1.70158;



		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;



	},



	easeInOutBack: function (x, t, b, c, d, s) {



		if (s == undefined) s = 1.70158; 



		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;



		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;



	},



	easeInBounce: function (x, t, b, c, d) {



		return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;



	},



	easeOutBounce: function (x, t, b, c, d) {



		if ((t/=d) < (1/2.75)) {



			return c*(7.5625*t*t) + b;



		} else if (t < (2/2.75)) {



			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;



		} else if (t < (2.5/2.75)) {



			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;



		} else {



			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;



		}



	},



	easeInOutBounce: function (x, t, b, c, d) {



		if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;



		return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;



	}



});



/*



    anythingSlider v1.2



    



    By Chris Coyier: http:/css-tricks.com



    with major improvements by Doug Neiner: http://pixelgraphics.us/



    based on work by Remy Sharp: http://jqueryfordesigners.com/











	To use the navigationFormatter function, you must have a function that



	accepts two paramaters, and returns a string of HTML text.



	



	index = integer index (1 based);



	panel = jQuery wrapped LI item this tab references



	@return = Must return a string of HTML/Text



	



	navigationFormatter: function(index, panel){



		return index + " Panel"; // This would have each tab with the text 'X Panel' where X = index



	}



*/







(function($){



	



    $.anythingSlider = function(el, options){



        // To avoid scope issues, use 'base' instead of 'this'



        // to reference this class from internal events and functions.



        var base = this;



        



        // Access to jQuery and DOM versions of element



        base.$el = $(el);



        base.el = el; 







		// Set up a few defaults



        base.currentPage = 1;



		base.timer = null;



		base.playing = false;







        // Add a reverse reference to the DOM object



        base.$el.data("AnythingSlider", base);



        



        base.init = function(){



            base.options = $.extend({},$.anythingSlider.defaults, options);



			



			// Cache existing DOM elements for later 



			base.$wrapper = base.$el.find('> div').css('overflow', 'hidden');



            base.$slider  = base.$wrapper.find('> ul');



            base.$items   = base.$slider.find('> li');



            base.$single  = base.$items.filter(':first');







			// Build the navigation if needed



			if(base.options.buildNavigation) base.buildNavigation();



        



        	// Get the details



            base.singleWidth = base.$single.outerWidth();



            base.pages = base.$items.length;







            // Top and tail the list with 'visible' number of items, top has the last section, and tail has the first



			// This supports the "infinite" scrolling



			base.$items.filter(':first').before(base.$items.filter(':last').clone().addClass('cloned'));



            base.$items.filter(':last' ).after(base.$items.filter(':first').clone().addClass('cloned'));







			// We just added two items, time to re-cache the list



            base.$items = base.$slider.find('> li'); // reselect



            



			// Setup our forward/backward navigation



			base.buildNextBackButtons();



		



			// If autoPlay functionality is included, then initialize the settings



			if(base.options.autoPlay) {



				base.playing = !base.options.startStopped; // Sets the playing variable to false if startStopped is true



				base.buildAutoPlay();



			};



			



			// If pauseOnHover then add hover effects



			if(base.options.pauseOnHover) {



				base.$el.hover(function(){



					base.clearTimer();



				}, function(){



					base.startStop(base.playing);



				});



			}



			



			// If a hash can not be used to trigger the plugin, then go to page 1



			if((base.options.hashTags == true && !base.gotoHash()) || base.options.hashTags == false){



				base.setCurrentPage(1);



			};



        };







		base.gotoPage = function(page, autoplay){



			// When autoplay isn't passed, we stop the timer



			if(autoplay !== true) autoplay = false;



			if(!autoplay) base.startStop(false);



			



			if(typeof(page) == "undefined" || page == null) {



				page = 1;



				base.setCurrentPage(1);



			};



			



			// Just check for bounds



			if(page > base.pages + 1) page = base.pages;



			if(page < 0 ) page = 1;







			var dir = page < base.currentPage ? -1 : 1,



                n = Math.abs(base.currentPage - page),



                left = base.singleWidth * dir * n;



			



			base.$wrapper.filter(':not(:animated)').animate({



                scrollLeft : '+=' + left



            }, base.options.animationTime, base.options.easing, function () {





                if (page == 0) {



                    base.$wrapper.scrollLeft(base.singleWidth * base.pages);



					page = base.pages;



                } else if (page > base.pages) {



                    base.$wrapper.scrollLeft(base.singleWidth);



                    // reset back to start position



                    page = 1;



                };



				base.setCurrentPage(page);



				



            });



		};



		



		base.setCurrentPage = function(page, move){



			// Set visual



			if(base.options.buildNavigation){



				base.$nav.find('.cur').removeClass('cur');



				$(base.$navLinks[page - 1]).addClass('cur');	



			};



			



			// Only change left if move does not equal false



			if(move !== false) base.$wrapper.scrollLeft(base.singleWidth * page);







			// Update local variable



			base.currentPage = page;



		};



		



		base.goForward = function(autoplay){



			if(autoplay !== true) autoplay = false;



			base.gotoPage(base.currentPage + 1, autoplay);



		};



		



		base.goBack = function(){



			base.gotoPage(base.currentPage - 1);



		};



		



		// This method tries to find a hash that matches panel-X



		// If found, it tries to find a matching item



		// If that is found as well, then that item starts visible



		base.gotoHash = function(){



			if(/^#?panel-\d+$/.test(window.location.hash)){



				var index = parseInt(window.location.hash.substr(7));



				var $item = base.$items.filter(':eq(' + index + ')');



				if($item.length != 0){



					base.setCurrentPage(index);



					return true;



				};



			};



			return false; // A item wasn't found;



		};



        



		// Creates the numbered navigation links



		base.buildNavigation = function(){



			base.$nav = $("<div id='thumbNav'></div>").appendTo(base.$el);



			base.$items.each(function(i,el){



				var index = i + 1;



				var $a = $("<a href='#'></a>");



				



				// If a formatter function is present, use it



				if( typeof(base.options.navigationFormatter) == "function"){



					$a.html(base.options.navigationFormatter(index, $(this)));



				} else {



					$a.text(index);



				}



				$a.click(function(e){

                    base.gotoPage(index);



                    



                    if (base.options.hashTags)



						base.setHash('panel-' + index);



						



                    e.preventDefault();



				});



				base.$nav.append($a);



			});



			base.$navLinks = base.$nav.find('> a');



		};



		



		



		// Creates the Forward/Backward buttons



		base.buildNextBackButtons = function(){



			var $forward = $('<a class="arrow forward">&gt;</a>'),



				$back    = $('<a class="arrow back">&lt;</a>');



				



            // Bind to the forward and back buttons



            $back.click(function(e){



                base.goBack();



				e.preventDefault();



            });







            $forward.click(function(e){



                base.goForward();



				e.preventDefault();



            });







			// Append elements to page



			base.$wrapper.after($back).after($forward);



		};



		



		// Creates the Start/Stop button



		base.buildAutoPlay = function(){







			base.$startStop = $("<a></a>").html(base.playing ? base.options.stopText :  base.options.startText);



			base.$el.append(base.$startStop);            



            base.$startStop.click(function(e){



				base.startStop(!base.playing);



				e.preventDefault();



            });







			// Use the same setting, but trigger the start;



			base.startStop(base.playing);



		};



		



		// Handles stopping and playing the slideshow



		// Pass startStop(false) to stop and startStop(true) to play



		base.startStop = function(playing){



			if(playing !== true) playing = false; // Default if not supplied is false



			



			// Update variable



			base.playing = playing;



			



			// Toggle playing and text



			if(base.options.autoPlay) base.$startStop.toggleClass("playing", playing).html( playing ? base.options.stopText : base.options.startText );



			



			if(playing){



				base.clearTimer(); // Just in case this was triggered twice in a row



				base.timer = window.setInterval(function(){



					base.goForward(true);



				}, base.options.delay);



			} else {



				base.clearTimer();



			};



		};



		



		base.clearTimer = function(){



			// Clear the timer only if it is set



			if(base.timer) window.clearInterval(base.timer);



		};



		



		// Taken from AJAXY jquery.history Plugin



		base.setHash = function ( hash ) {



			// Write hash



			if ( typeof window.location.hash !== 'undefined' ) {



				if ( window.location.hash !== hash ) {



					window.location.hash = hash;



				};



			} else if ( location.hash !== hash ) {



				location.hash = hash;



			};



			



			// Done



			return hash;



		};



		// <-- End AJAXY code











		// Trigger the initialization



        base.init();



    };







	



    $.anythingSlider.defaults = {



        easing: "swing",                // Anything other than "linear" or "swing" requires the easing plugin



        autoPlay: true,                 // This turns off the entire FUNCTIONALY, not just if it starts running or not



        startStopped: false,            // If autoPlay is on, this can force it to start stopped



        delay: 3000,                    // How long between slide transitions in AutoPlay mode



        animationTime: 600,             // How long the slide transition takes



        hashTags: true,                 // Should links change the hashtag in the URL?



        buildNavigation: true,          // If true, builds and list of anchor links to link to each slide



        pauseOnHover: true,             // If true, and autoPlay is enabled, the show will pause on hover



		startText: "",             // Start text



		stopText: "",               // Stop text



		navigationFormatter: null       // Details at the top of the file on this use (advanced use)



    };



	







    $.fn.anythingSlider = function(options){



		if(typeof(options) == "object"){



		    return this.each(function(i){			



				(new $.anythingSlider(this, options));







	            // This plugin supports multiple instances, but only one can support hash-tag support



				// This disables hash-tags on all items but the first one



				options.hashTags = false;



	        });	



		} else if (typeof(options) == "number") {







			return this.each(function(i){



				var anySlide = $(this).data('AnythingSlider');



				if(anySlide){



					anySlide.gotoPage(options);



				}



			});



		}



    };







	



})(jQuery);





/**



 * jCarouselLite - jQuery plugin to navigate images/any content in a carousel style widget.



 * @requires jQuery v1.2 or above



 *



 * http://gmarwaha.com/jquery/jcarousellite/



 *



 * Copyright (c) 2007 Ganeshji Marwaha (gmarwaha.com)



 * Dual licensed under the MIT and GPL licenses:



 * http://www.opensource.org/licenses/mit-license.php



 * http://www.gnu.org/licenses/gpl.html



 *



 * Version: 1.0.1



 * Note: Requires jquery 1.2 or above from version 1.0.1



 */







/**



 * Creates a carousel-style navigation widget for images/any-content from a simple HTML markup.



 *



 * The HTML markup that is used to build the carousel can be as simple as...



 *



 *  <div class="carousel">



 *      <ul>



 *          <li><img src="image/1.jpg" alt="1"></li>



 *          <li><img src="image/2.jpg" alt="2"></li>



 *          <li><img src="image/3.jpg" alt="3"></li>



 *      </ul>



 *  </div>



 *



 * As you can see, this snippet is nothing but a simple div containing an unordered list of images.



 * You don't need any special "class" attribute, or a special "css" file for this plugin.



 * I am using a class attribute just for the sake of explanation here.



 *



 * To navigate the elements of the carousel, you need some kind of navigation buttons.



 * For example, you will need a "previous" button to go backward, and a "next" button to go forward.



 * This need not be part of the carousel "div" itself. It can be any element in your page.



 * Lets assume that the following elements in your document can be used as next, and prev buttons...



 *



 * <button class="prev">&lt;&lt;</button>



 * <button class="next">&gt;&gt;</button>



 *



 * Now, all you need to do is call the carousel component on the div element that represents it, and pass in the



 * navigation buttons as options.



 *



 * $(".carousel").jCarouselLite({



 *      btnNext: ".next",



 *      btnPrev: ".prev"



 * });



 *



 * That's it, you would have now converted your raw div, into a magnificient carousel.



 *



 * There are quite a few other options that you can use to customize it though.



 * Each will be explained with an example below.



 *



 * @param an options object - You can specify all the options shown below as an options object param.



 *



 * @option btnPrev, btnNext : string - no defaults



 * @example



 * $(".carousel").jCarouselLite({



 *      btnNext: ".next",



 *      btnPrev: ".prev"



 * });



 * @desc Creates a basic carousel. Clicking "btnPrev" navigates backwards and "btnNext" navigates forward.



 *



 * @option btnGo - array - no defaults



 * @example



 * $(".carousel").jCarouselLite({



 *      btnNext: ".next",



 *      btnPrev: ".prev",



 *      btnGo: [".0", ".1", ".2"]



 * });



 * @desc If you don't want next and previous buttons for navigation, instead you prefer custom navigation based on



 * the item number within the carousel, you can use this option. Just supply an array of selectors for each element



 * in the carousel. The index of the array represents the index of the element. What i mean is, if the



 * first element in the array is ".0", it means that when the element represented by ".0" is clicked, the carousel



 * will slide to the first element and so on and so forth. This feature is very powerful. For example, i made a tabbed



 * interface out of it by making my navigation elements styled like tabs in css. As the carousel is capable of holding



 * any content, not just images, you can have a very simple tabbed navigation in minutes without using any other plugin.



 * The best part is that, the tab will "slide" based on the provided effect. :-)



 *



 * @option mouseWheel : boolean - default is false



 * @example



 * $(".carousel").jCarouselLite({



 *      mouseWheel: true



 * });



 * @desc The carousel can also be navigated using the mouse wheel interface of a scroll mouse instead of using buttons.



 * To get this feature working, you have to do 2 things. First, you have to include the mouse-wheel plugin from brandon.



 * Second, you will have to set the option "mouseWheel" to true. That's it, now you will be able to navigate your carousel



 * using the mouse wheel. Using buttons and mouseWheel or not mutually exclusive. You can still have buttons for navigation



 * as well. They complement each other. To use both together, just supply the options required for both as shown below.



 * @example



 * $(".carousel").jCarouselLite({



 *      btnNext: ".next",



 *      btnPrev: ".prev",



 *      mouseWheel: true



 * });



 *



 * @option auto : number - default is null, meaning autoscroll is disabled by default



 * @example



 * $(".carousel").jCarouselLite({



 *      auto: 800,



 *      speed: 500



 * });



 * @desc You can make your carousel auto-navigate itself by specfying a millisecond value in this option.



 * The value you specify is the amount of time between 2 slides. The default is null, and that disables auto scrolling.



 * Specify this value and magically your carousel will start auto scrolling.



 *



 * @option speed : number - 200 is default



 * @example



 * $(".carousel").jCarouselLite({



 *      btnNext: ".next",



 *      btnPrev: ".prev",



 *      speed: 800



 * });



 * @desc Specifying a speed will slow-down or speed-up the sliding speed of your carousel. Try it out with



 * different speeds like 800, 600, 1500 etc. Providing 0, will remove the slide effect.



 *



 * @option easing : string - no easing effects by default.



 * @example



 * $(".carousel").jCarouselLite({



 *      btnNext: ".next",



 *      btnPrev: ".prev",



 *      easing: "bounceout"



 * });



 * @desc You can specify any easing effect. Note: You need easing plugin for that. Once specified,



 * the carousel will slide based on the provided easing effect.



 *



 * @option vertical : boolean - default is false



 * @example



 * $(".carousel").jCarouselLite({



 *      btnNext: ".next",



 *      btnPrev: ".prev",



 *      vertical: true



 * });



 * @desc Determines the direction of the carousel. true, means the carousel will display vertically. The next and



 * prev buttons will slide the items vertically as well. The default is false, which means that the carousel will



 * display horizontally. The next and prev items will slide the items from left-right in this case.



 *



 * @option circular : boolean - default is true



 * @example



 * $(".carousel").jCarouselLite({



 *      btnNext: ".next",



 *      btnPrev: ".prev",



 *      circular: false



 * });



 * @desc Setting it to true enables circular navigation. This means, if you click "next" after you reach the last



 * element, you will automatically slide to the first element and vice versa. If you set circular to false, then



 * if you click on the "next" button after you reach the last element, you will stay in the last element itself



 * and similarly for "previous" button and first element.



 *



 * @option visible : number - default is 3



 * @example



 * $(".carousel").jCarouselLite({



 *      btnNext: ".next",



 *      btnPrev: ".prev",



 *      visible: 4



 * });



 * @desc This specifies the number of items visible at all times within the carousel. The default is 3.



 * You are even free to experiment with real numbers. Eg: "3.5" will have 3 items fully visible and the



 * last item half visible. This gives you the effect of showing the user that there are more images to the right.



 *



 * @option start : number - default is 0



 * @example



 * $(".carousel").jCarouselLite({



 *      btnNext: ".next",



 *      btnPrev: ".prev",



 *      start: 2



 * });



 * @desc You can specify from which item the carousel should start. Remember, the first item in the carousel



 * has a start of 0, and so on.



 *



 * @option scrool : number - default is 1



 * @example



 * $(".carousel").jCarouselLite({



 *      btnNext: ".next",



 *      btnPrev: ".prev",



 *      scroll: 2



 * });



 * @desc The number of items that should scroll/slide when you click the next/prev navigation buttons. By



 * default, only one item is scrolled, but you may set it to any number. Eg: setting it to "2" will scroll



 * 2 items when you click the next or previous buttons.



 *



 * @option beforeStart, afterEnd : function - callbacks



 * @example



 * $(".carousel").jCarouselLite({



 *      btnNext: ".next",



 *      btnPrev: ".prev",



 *      beforeStart: function(a) {



 *          alert("Before animation starts:" + a);



 *      },



 *      afterEnd: function(a) {



 *          alert("After animation ends:" + a);



 *      }



 * });



 * @desc If you wanted to do some logic in your page before the slide starts and after the slide ends, you can



 * register these 2 callbacks. The functions will be passed an argument that represents an array of elements that



 * are visible at the time of callback.



 *



 *



 * @cat Plugins/Image Gallery



 * @author Ganeshji Marwaha/ganeshread@gmail.com



 */







(function($) {                                          // Compliant with jquery.noConflict()



$.fn.jCarouselLite = function(o) {



    o = $.extend({



        btnPrev: null,



        btnNext: null,



        btnGo: null,



        mouseWheel: false,



        auto: null,



        hoverPause: false,







        speed: 200,



        easing: null,







        vertical: false,



        circular: true,



        visible: 3,



        start: 0,



        scroll: 1,







        beforeStart: null,



        afterEnd: null



    }, o || {});







    return this.each(function() {                           // Returns the element collection. Chainable.







        var running = false, animCss=o.vertical?"top":"left", sizeCss=o.vertical?"height":"width";



        var div = $(this), ul = $("ul", div), tLi = $("li", ul), tl = tLi.size(), v = o.visible;







        if(o.circular) {



            ul.prepend(tLi.slice(tl-v+1).clone())



              .append(tLi.slice(0,o.scroll).clone());



            o.start += v-1;



        }







        var li = $("li", ul), itemLength = li.size(), curr = o.start;



        div.css("visibility", "visible");







        li.css({overflow: "hidden", float: o.vertical ? "none" : "left"});



        ul.css({margin: "0", padding: "0", position: "relative", "list-style-type": "none", "z-index": "1"});



        div.css({overflow: "hidden", position: "relative", "z-index": "2", left: "0px"});







        var liSize = o.vertical ? height(li) : width(li);   // Full li size(incl margin)-Used for animation



        var ulSize = liSize * itemLength;                   // size of full ul(total length, not just for the visible items)



        var divSize = liSize * v;                           // size of entire div(total length for just the visible items)







        li.css({width: li.width(), height: li.height()});



        ul.css(sizeCss, ulSize+"px").css(animCss, -(curr*liSize));







        div.css(sizeCss, divSize+"px");                     // Width of the DIV. length of visible images







        if(o.btnPrev) {



            $(o.btnPrev).click(function() {



                return go(curr-o.scroll);



            });



            if(o.hoverPause) {



                $(o.btnPrev).hover(function(){stopAuto();}, function(){startAuto();});



            }



        }











        if(o.btnNext) {



            $(o.btnNext).click(function() {



                return go(curr+o.scroll);



            });



            if(o.hoverPause) {



                $(o.btnNext).hover(function(){stopAuto();}, function(){startAuto();});



            }



        }







        if(o.btnGo)



            $.each(o.btnGo, function(i, val) {



                $(val).click(function() {



                    return go(o.circular ? o.visible+i : i);



                });



            });







        if(o.mouseWheel && div.mousewheel)



            div.mousewheel(function(e, d) {



                return d>0 ? go(curr-o.scroll) : go(curr+o.scroll);



            });







        var autoInterval;







        function startAuto() {



          stopAuto();



          autoInterval = setInterval(function() {



                  go(curr+o.scroll);



              }, o.auto+o.speed);



        };







        function stopAuto() {



            clearInterval(autoInterval);



        };







        if(o.auto) {



            if(o.hoverPause) {



                div.hover(function(){stopAuto();}, function(){startAuto();});



            }



            startAuto();



        };







        function vis() {



            return li.slice(curr).slice(0,v);



        };







        function go(to) {



            if(!running) {







                if(o.beforeStart)



                    o.beforeStart.call(this, vis());







                if(o.circular) {            // If circular we are in first or last, then goto the other end



                    if(to<0) {           // If before range, then go around



                        ul.css(animCss, -( (curr + tl) * liSize)+"px");



                        curr = to + tl;



                    } else if(to>itemLength-v) { // If beyond range, then come around



                        ul.css(animCss, -( (curr - tl) * liSize ) + "px" );



                        curr = to - tl;



                    } else curr = to;



                } else {                    // If non-circular and to points to first or last, we just return.



                    if(to<0 || to>itemLength-v) return;



                    else curr = to;



                }                           // If neither overrides it, the curr will still be "to" and we can proceed.







                running = true;







                ul.animate(



                    animCss == "left" ? { left: -(curr*liSize) } : { top: -(curr*liSize) } , o.speed, o.easing,



                    function() {



                        if(o.afterEnd)



                            o.afterEnd.call(this, vis());



                        running = false;



                    }



                );



                // Disable buttons when the carousel reaches the last/first, and enable when not



                if(!o.circular) {



                    $(o.btnPrev + "," + o.btnNext).removeClass("disabled");



                    $( (curr-o.scroll<0 && o.btnPrev)



                        ||



                       (curr+o.scroll > itemLength-v && o.btnNext)



                        ||



                       []



                     ).addClass("disabled");



                }







            }



            return false;



        };



    });



};







function css(el, prop) {



    return parseInt($.css(el[0], prop)) || 0;



};



function width(el) {



    return  el[0].offsetWidth + css(el, 'marginLeft') + css(el, 'marginRight');



};



function height(el) {



    return el[0].offsetHeight + css(el, 'marginTop') + css(el, 'marginBottom');



};







})(jQuery);




