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

 panes.eq(i).fadeIn(conf.fadeInSpeed, done); 
 },
 
 // for basic accordions
 slide: function(i, done) { 
 this.getPanes().slideUp(200);
 this.getPanes().eq(i).slideDown(400, done); 
 }, 

 // simple AJAX effect
 ajax: function(i, done) { 
 this.getPanes().eq(0).load(this.getTabs().eq(i).attr("href"), done); 
 }
 
 }; 
 
 var w;
 
 // this is how you add effects
 $.tools.tabs.addEffect("horizontal", function(i, done) {
 
 // store original width of a pane into memory
 if (!w) { w = this.getPanes().eq(0).width(); }
 
 // set current pane's width to zero
 this.getCurrentPane().animate({width: 0}, function() { $(this).hide(); });
 
 // grow opened pane to it's original width
 this.getPanes().eq(i).animate({width: w}, function() { 
 $(this).show();
 done.call();
 });
 
 }); 
 

 function Tabs(tabs, panes, conf) { 
 
 var self = this, $self = $(this), current;

 // bind all callbacks from configuration
 $.each(conf, function(name, fn) {
 if ($.isFunction(fn)) { $self.bind(name, fn); }
 });
 
 
 // public methods
 $.extend(this, { 
 click: function(i, e) {
 
 var pane = self.getCurrentPane(); 
 var tab = tabs.eq(i); 
 
 if (typeof i == 'string' && i.replace("#", "")) {
 tab = tabs.filter("[href*=" + i.replace("#", "") + "]");
 i = Math.max(tabs.index(tab), 0);
 }
 
 if (conf.rotate) {
 var last = tabs.length -1; 
 if (i < 0) { return self.click(last, e); }
 if (i > last) { return self.click(0, e); } 
 }
 
 if (!tab.length) { 
 if (current >= 0) { return self; }
 i = conf.initialIndex;
 tab = tabs.eq(i);
 } 
 
 // current tab is being clicked
 if (i === current) { return self; }
 
 // possibility to cancel click action 
 e = e || $.Event();
 e.type = "onBeforeClick";
 $self.trigger(e, [i]); 
 if (e.isDefaultPrevented()) { return; }
 
 // call the effect
 effects[conf.effect].call(self, i, function() {

 // onClick callback
 e.type = "onClick";
 $self.trigger(e, [i]); 
 }); 
 
 // onStart
 e.type = "onStart";
 $self.trigger(e, [i]); 
 if (e.isDefaultPrevented()) { return; } 
 
 // default behaviour
 current = i;
 tabs.removeClass(conf.current); 
 tab.addClass(conf.current); 
 
 return self;
 },
 
 getConf: function() {
 return conf; 
 },

 getTabs: function() {
 return tabs; 
 },
 
 getPanes: function() {
 return panes; 
 },
 
 getCurrentPane: function() {
 return panes.eq(current); 
 },
 
 getCurrentTab: function() {
 return tabs.eq(current); 
 },
 
 getIndex: function() {
 return current; 
 }, 
 
 next: function() {
 return self.click(current + 1);
 },
 
 prev: function() {
 return self.click(current - 1); 
 }, 
 
 bind: function(name, fn) {
 $self.bind(name, fn);
 return self; 
 }, 
 
 onBeforeClick: function(fn) {
 return this.bind("onBeforeClick", fn);
 },
 
 onClick: function(fn) {
 return this.bind("onClick", fn);
 },
 
 unbind: function(name) {
 $self.unbind(name);
 return self; 
 } 
 
 });
 
 
 // setup click actions for each tab
 tabs.each(function(i) { 
 $(this).bind(conf.event, function(e) {
 self.click(i, e);
 return false;
 }); 
 });

 // if no pane is visible --> click on the first tab
 if (location.hash) {
 self.click(location.hash);
 } else {
 if (conf.initialIndex === 0 || conf.initialIndex > 0) {
 self.click(conf.initialIndex);
 }
 } 
 
 // cross tab anchor link
 panes.find("a[href^=#]").click(function(e) {
 self.click($(this).attr("href"), e); 
 }); 
 }
 
 
 // jQuery plugin implementation
 $.fn.tabs = function(query, conf) {
 
 // return existing instance
 var el = this.eq(typeof conf == 'number' ? conf : 0).data("tabs");
 if (el) { return el; }

 if ($.isFunction(conf)) {
 conf = {onBeforeClick: conf};
 }
 
 // setup options
 var globals = $.extend({}, $.tools.tabs.conf), len = this.length;
 conf = $.extend(globals, conf); 

 
 // install tabs for each items in jQuery 
 this.each(function(i) { 
 var root = $(this); 
 
 // find tabs
 var els = root.find(conf.tabs);
 
 if (!els.length) {
 els = root.children(); 
 }
 
 // find panes
 var panes = query.jquery ? query : root.children(query);
 
 if (!panes.length) {
 panes = len == 1 ? $(query) : root.parent().find(query);
 } 
 
 el = new Tabs(els, panes, conf);
 root.data("tabs", el);
 
 }); 
 
 return conf.api ? el: this; 
 }; 
 
}) (jQuery); 



/**
 * tools.tooltip 1.1.2 - Tooltips done right.
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/tooltip.html
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 *
 * Launch : November 2008
 * Date: ${date}
 * Revision: ${revision} 
 */
(function($) { 

 var instances = [];
 
 // static constructs
 $.tools = $.tools || {};
 
 $.tools.tooltip = {
 version: '1.1.2',
 
 conf: { 
 
 // default effect variables
 effect: 'toggle', 
 fadeOutSpeed: "fast",
 tip: null,
 
 predelay: 0,
 delay: 30,
 opacity: 1, 
 lazy: undefined,
 
 // 'top', 'bottom', 'right', 'left', 'center'
 position: ['top', 'center'], 
 offset: [0, 0], 
 cancelDefault: true,
 relative: false,
 oneInstance: true,
 
 
 // type to event mapping 
 events: {
 def: "mouseover,mouseout",
 input: "focus,blur",
 widget: "focus mouseover,blur mouseout",
 tooltip: "mouseover,mouseout"
 }, 
 
 api: false
 },
 
 addEffect: function(name, loadFn, hideFn) {
 effects[name] = [loadFn, hideFn]; 
 } 
 };
 
 
 var effects = { 
 toggle: [ 
 function(done) { 
 var conf = this.getConf(), tip = this.getTip(), o = conf.opacity;
 if (o < 1) { tip.css({opacity: o}); }
 tip.show();
 done.call();
 },
 
 function(done) { 
 this.getTip().hide();
 done.call();
 } 
 ],
 
 fade: [
 function(done) { this.getTip().fadeIn(this.getConf().fadeInSpeed, done); }, 
 function(done) { this.getTip().fadeOut(this.getConf().fadeOutSpeed, done); } 
 ] 
 }; 

 function Tooltip(trigger, conf) {

 var self = this, $self = $(this);
 
 trigger.data("tooltip", self);
 
 // find the tip
 var tip = trigger.next();
 
 if (conf.tip) {
 
 tip = $(conf.tip);
 
 // multiple tip elements
 if (tip.length > 1) {
 
 // find sibling
 tip = trigger.nextAll(conf.tip).eq(0); 
 
 // find sibling from the parent element
 if (!tip.length) {
 tip = trigger.parent().nextAll(conf.tip).eq(0);
 }
 } 
 } 
 
 /* calculate tip position relative to the trigger */ 
 function getPosition(e) { 
 
 // get origin top/left position 
 var top = conf.relative ? trigger.position().top : trigger.offset().top, 
 left = conf.relative ? trigger.position().left : trigger.offset().left,
 pos = conf.position[0];

 top -= tip.outerHeight() - conf.offset[0];
 left += trigger.outerWidth() + conf.offset[1];
 
 // adjust Y 
 var height = tip.outerHeight() + trigger.outerHeight();
 if (pos == 'center') { top += height / 2; }
 if (pos == 'bottom') { top += height; }
 
 // adjust X
 pos = conf.position[1]; 
 var width = tip.outerWidth() + trigger.outerWidth();
 if (pos == 'center') { left -= width / 2; }
 if (pos == 'left') { left -= width; } 
 
 return {top: top, left: left};
 } 

 
 // event management
 var isInput = trigger.is(":input"), 
 isWidget = isInput && trigger.is(":checkbox, :radio, select, :button"), 
 type = trigger.attr("type"),
 evt = conf.events[type] || conf.events[isInput ? (isWidget ? 'widget' : 'input') : 'def']; 
 
 evt = evt.split(/,\s*/); 
 if (evt.length != 2) { throw "Tooltip: bad events configuration for " + type; }
 
 trigger.bind(evt[0], function(e) {
 
 // close all instances
 if (conf.oneInstance) {
 $.each(instances, function() {
 this.hide(); 
 });
 }
 
 // see if the tip was launched by this trigger
 var t = tip.data("trigger"); 
 if (t && t[0] != this) { tip.hide().stop(true, true); } 
 
 e.target = this;
 self.show(e); 
 
 // tooltip close events
 evt = conf.events.tooltip.split(/,\s*/);
 tip.bind(evt[0], function() { self.show(e); });
 if (evt[1]) { tip.bind(evt[1], function() { self.hide(e); }); }
 
 });
 
 trigger.bind(evt[1], function(e) {
 self.hide(e); 
 });
 
 // ensure that the tip really shows up. IE cannot catch up with this.
 if (!$.browser.msie && !isInput && !conf.predelay) {
 trigger.mousemove(function() { 
 if (!self.isShown()) {
 trigger.triggerHandler("mouseover"); 
 }
 });
 }

 // avoid "black box" bug in IE with PNG background images
 if (conf.opacity < 1) {
 tip.css("opacity", conf.opacity); 
 }
 
 var pretimer = 0, title = trigger.attr("title");
 
 if (title && conf.cancelDefault) { 
 trigger.removeAttr("title");
 trigger.data("title", title); 
 } 
 
 $.extend(self, {
 
 show: function(e) {
 
 if (e) { trigger = $(e.target); } 

 clearTimeout(tip.data("timer")); 

 if (tip.is(":animated") || tip.is(":visible")) { return self; }
 
 function show() {
 
 // remember the trigger element for this tip
 tip.data("trigger", trigger);
 
 // get position
 var pos = getPosition(e); 
 
 // title attribute 
 if (conf.tip && title) {
 tip.html(trigger.data("title"));
 } 
 
 // onBeforeShow
 e = e || $.Event();
 e.type = "onBeforeShow";
 $self.trigger(e, [pos]); 
 if (e.isDefaultPrevented()) { return self; }
 
 
 // onBeforeShow may have altered the configuration
 pos = getPosition(e);
 
 // set position
 tip.css({position:'absolute', top: pos.top, left: pos.left}); 
 
 // invoke effect
 var eff = effects[conf.effect];
 if (!eff) { throw "Nonexistent effect \"" + conf.effect + "\""; }
 
 eff[0].call(self, function() {
 e.type = "onShow";
 $self.trigger(e); 
 }); 
 
 }
 
 if (conf.predelay) {
 clearTimeout(pretimer);
 pretimer = setTimeout(show, conf.predelay); 
 
 } else {
 show(); 
 }
 
 return self;
 },
 
 hide: function(e) {

 clearTimeout(tip.data("timer"));
 clearTimeout(pretimer);
 
 if (!tip.is(":visible")) { return; }
 
 function hide() {
 
 // onBeforeHide
 e = e || $.Event();
 e.type = "onBeforeHide";
 $self.trigger(e); 
 if (e.isDefaultPrevented()) { return; }
 
 effects[conf.effect][1].call(self, function() {
 e.type = "onHide";
 $self.trigger(e); 
 });
 }
 
 if (conf.delay && e) {
 tip.data("timer", setTimeout(hide, conf.delay));
 
 } else {
 hide(); 
 } 
 
 return self;
 },
 
 isShown: function() {
 return tip.is(":visible, :animated"); 
 },
 
 getConf: function() {
 return conf; 
 },
 
 getTip: function() {
 return tip; 
 },
 
 getTrigger: function() {
 return trigger; 
 },
 
 // callback functions 
 bind: function(name, fn) {
 $self.bind(name, fn);
 return self; 
 },
 
 onHide: function(fn) {
 return this.bind("onHide", fn);
 },

 onBeforeShow: function(fn) {
 return this.bind("onBeforeShow", fn);
 },
 
 onShow: function(fn) {
 return this.bind("onShow", fn);
 },
 
 onBeforeHide: function(fn) {
 return this.bind("onBeforeHide", fn);
 },

 unbind: function(name) {
 $self.unbind(name);
 return self; 
 } 

 }); 

 // bind all callbacks from configuration
 $.each(conf, function(name, fn) {
 if ($.isFunction(fn)) { self.bind(name, fn); }
 }); 
 
 }
 
 
 // jQuery plugin implementation
 $.prototype.tooltip = function(conf) {
 
 // return existing instance
 var api = this.eq(typeof conf == 'number' ? conf : 0).data("tooltip");
 if (api) { return api; }
 
 // setup options
 var globals = $.extend(true, {}, $.tools.tooltip.conf); 
 
 if ($.isFunction(conf)) {
 conf = {onBeforeShow: conf};
 
 } else if (typeof conf == 'string') {
 conf = {tip: conf}; 
 }

 conf = $.extend(true, globals, conf);
 
 // can also be given as string
 if (typeof conf.position == 'string') {
 conf.position = conf.position.split(/,?\s/); 
 }
 
 // assign tip's only when apiement is being mouseovered 
 if (conf.lazy !== false && (conf.lazy === true || this.length > 20)) { 
 
 this.one("mouseover", function(e) { 
 api = new Tooltip($(this), conf);
 api.show(e);
 instances.push(api);
 }); 
 
 } else {
 
 // install tooltip for each entry in jQuery object
 this.each(function() {
 api = new Tooltip($(this), conf); 
 instances.push(api);
 });
 } 

 return conf.api ? api: this; 
 
 };
 
}) (jQuery);

 


/**
 * tools.scrollable 1.1.2 - Scroll your HTML with eye candy.
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/scrollable.html
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 *
 * Launch : March 2008
 * Date: ${date}
 * Revision: ${revision} 
 */
(function($) { 
 
 // static constructs
 $.tools = $.tools || {};
 
 $.tools.scrollable = {
 version: '1.1.2',
 
 conf: {
 
 // basics
 size: 5,
 vertical: false,
 speed: 400,
 keyboard: true, 
 
 // by default this is the same as size
 keyboardSteps: null, 
 
 // other
 disabledClass: 'disabled',
 hoverClass: null, 
 clickable: true,
 activeClass: 'active', 
 easing: 'swing',
 loop: false,
 
 items: '.items',
 item: null,
 
 // navigational elements 
 prev: '.prev',
 next: '.next',
 prevPage: '.prevPage',
 nextPage: '.nextPage', 
 api: false
 
 // CALLBACKS: onBeforeSeek, onSeek, onReload
 } 
 };
 
 var current; 
 
 // constructor
 function Scrollable(root, conf) { 
 
 // current instance
 var self = this, $self = $(this),
 horizontal = !conf.vertical,
 wrap = root.children(),
 index = 0,
 forward; 
 
 
 if (!current) { current = self; }
 
 // bind all callbacks from configuration
 $.each(conf, function(name, fn) {
 if ($.isFunction(fn)) { $self.bind(name, fn); }
 });
 
 if (wrap.length > 1) { wrap = $(conf.items, root); }
 
 // navigational items can be anywhere when globalNav = true
 function find(query) {
 var els = $(query);
 return conf.globalNav ? els : root.parent().find(query); 
 }
 
 // to be used by plugins
 root.data("finder", find);
 
 // get handle to navigational elements
 var prev = find(conf.prev),
 next = find(conf.next),
 prevPage = find(conf.prevPage),
 nextPage = find(conf.nextPage);

 
 // methods
 $.extend(self, {
 
 getIndex: function() {
 return index; 
 },
 
 getClickIndex: function() {
 var items = self.getItems(); 
 return items.index(items.filter("." + conf.activeClass)); 
 },
 
 getConf: function() {
 return conf; 
 },
 
 getSize: function() {
 return self.getItems().size(); 
 },
 
 getPageAmount: function() {
 return Math.ceil(this.getSize() / conf.size); 
 },
 
 getPageIndex: function() {
 return Math.ceil(index / conf.size); 
 },

 getNaviButtons: function() {
 return prev.add(next).add(prevPage).add(nextPage); 
 },
 
 getRoot: function() {
 return root; 
 },
 
 getItemWrap: function() {
 return wrap; 
 },
 
 getItems: function() {
 return wrap.children(conf.item); 
 },
 
 getVisibleItems: function() {
 return self.getItems().slice(index, index + conf.size); 
 },
 
 /* all seeking functions depend on this */ 
 seekTo: function(i, time, fn) {

 if (i < 0) { i = 0; } 
 
 // nothing happens
 if (index === i) { return self; } 
 
 // function given as second argument
 if ($.isFunction(time)) {
 fn = time;
 }

 // seeking exceeds the end 
 if (i > self.getSize() - conf.size) { 
 return conf.loop ? self.begin() : this.end(); 
 } 

 var item = self.getItems().eq(i); 
 if (!item.length) { return self; } 
 
 // onBeforeSeek
 var e = $.Event("onBeforeSeek");

 $self.trigger(e, [i]); 
 if (e.isDefaultPrevented()) { return self; } 
 
 // get the (possibly altered) speed
 if (time === undefined || $.isFunction(time)) { time = conf.speed; }
 
 function callback() {
 if (fn) { fn.call(self, i); }
 $self.trigger("onSeek", [i]);
 }
 
 if (horizontal) {
 wrap.animate({left: -item.position().left}, time, conf.easing, callback); 
 } else {
 wrap.animate({top: -item.position().top}, time, conf.easing, callback); 
 }
 
 
 current = self;
 index = i; 
 
 // onStart
 e = $.Event("onStart");
 $self.trigger(e, [i]); 
 if (e.isDefaultPrevented()) { return self; } 
 
 
 /* default behaviour */
 
 // prev/next buttons disabled flags
 prev.add(prevPage).toggleClass(conf.disabledClass, i === 0);
 next.add(nextPage).toggleClass(conf.disabledClass, i >= self.getSize() - conf.size);
 
 return self; 
 }, 
 
 
 move: function(offset, time, fn) {
 forward = offset > 0;
 return this.seekTo(index + offset, time, fn);
 },
 
 next: function(time, fn) {
 return this.move(1, time, fn); 
 },
 
 prev: function(time, fn) {
 return this.move(-1, time, fn); 
 },
 
 movePage: function(offset, time, fn) {
 forward = offset > 0;
 var steps = conf.size * offset;
 
 var i = index % conf.size;
 if (i > 0) {
 steps += (offset > 0 ? -i : conf.size - i);
 }
 
 return this.move(steps, time, fn); 
 },
 
 prevPage: function(time, fn) {
 return this.movePage(-1, time, fn);
 }, 
 
 nextPage: function(time, fn) {
 return this.movePage(1, time, fn);
 }, 
 
 setPage: function(page, time, fn) {
 return this.seekTo(page * conf.size, time, fn);
 }, 
 
 begin: function(time, fn) {
 forward = false;
 return this.seekTo(0, time, fn); 
 },
 
 end: function(time, fn) {
 forward = true;
 var to = this.getSize() - conf.size;
 return to > 0 ? this.seekTo(to, time, fn) : self; 
 },
 
 reload: function() { 
 $self.trigger("onReload");
 return self;
 }, 
 
 focus: function() {
 current = self;
 return self;
 },
 
 click: function(i) {
 
 var item = self.getItems().eq(i), 
 klass = conf.activeClass,
 size = conf.size; 
 
 // check that i is sane
 if (i < 0 || i >= self.getSize()) { return self; }
 
 // size == 1 
 if (size == 1) {
 if (conf.loop) { return self.next(); }
 
 if (i === 0 || i == self.getSize() -1) { 
 forward = (forward === undefined) ? true : !forward; 
 }
 return forward === false ? self.prev() : self.next(); 
 } 
 
 // size == 2
 if (size == 2) {
 if (i == index) { i--; }
 self.getItems().removeClass(klass);
 item.addClass(klass); 
 return self.seekTo(i, time, fn);
 } 
 
 if (!item.hasClass(klass)) { 
 self.getItems().removeClass(klass);
 item.addClass(klass);
 var delta = Math.floor(size / 2);
 var to = i - delta;
 
 // next to last item must work
 if (to > self.getSize() - size) { 
 to = self.getSize() - size; 
 }
 
 if (to !== i) {
 return self.seekTo(to); 
 }
 }
 
 return self;
 },
 
 // bind / unbind
 bind: function(name, fn) {
 $self.bind(name, fn);
 return self; 
 }, 
 
 unbind: function(name) {
 $self.unbind(name);
 return self; 
 } 
 
 });
 
 // callbacks 
 $.each("onBeforeSeek,onStart,onSeek,onReload".split(","), function(i, ev) {
 self[ev] = function(fn) {
 return self.bind(ev, fn); 
 };
 }); 
 
 
 // prev button 
 prev.addClass(conf.disabledClass).click(function() {
 self.prev(); 
 });
 

 // next button
 next.click(function() { 
 self.next(); 
 });
 
 // prev page button
 nextPage.click(function() { 
 self.nextPage(); 
 });
 
 if (self.getSize() < conf.size) {
 next.add(nextPage).addClass(conf.disabledClass); 
 }
 

 // next page button
 prevPage.addClass(conf.disabledClass).click(function() { 
 self.prevPage(); 
 }); 
 
 
 // hover
 var hc = conf.hoverClass, keyId = "keydown." + Math.random().toString().substring(10); 
 
 self.onReload(function() { 

 // hovering
 if (hc) {
 self.getItems().hover(function() {
 $(this).addClass(hc); 
 }, function() {
 $(this).removeClass(hc); 
 }); 
 }
 
 // clickable
 if (conf.clickable) {
 self.getItems().each(function(i) {
 $(this).unbind("click.scrollable").bind("click.scrollable", function(e) {
 if ($(e.target).is("a")) { return; } 
 return self.click(i);
 });
 });
 } 
 
 // keyboard 
 if (conf.keyboard) { 
 
 // keyboard works on one instance at the time. thus we need to unbind first
 $(document).unbind(keyId).bind(keyId, function(evt) {

 // do nothing with CTRL / ALT buttons
 if (evt.altKey || evt.ctrlKey) { return; }
 
 // do nothing for unstatic and unfocused instances
 if (conf.keyboard != 'static' && current != self) { return; }
 
 var s = conf.keyboardSteps; 
 
 if (horizontal && (evt.keyCode == 37 || evt.keyCode == 39)) { 
 self.move(evt.keyCode == 37 ? -s : s);
 return evt.preventDefault();
 } 
 
 if (!horizontal && (evt.keyCode == 38 || evt.keyCode == 40)) {
 self.move(evt.keyCode == 38 ? -s : s);
 return evt.preventDefault();
 }
 
 return true;
 
 });
 
 } else {
 $(document).unbind(keyId); 
 } 

 });
 
 self.reload(); 
 
 } 

 
 // jQuery plugin implementation
 $.fn.scrollable = function(conf) { 
 
 // already constructed --> return API
 var el = this.eq(typeof conf == 'number' ? conf : 0).data("scrollable");
 if (el) { return el; } 
 
 var globals = $.extend({}, $.tools.scrollable.conf);
 conf = $.extend(globals, conf);
 
 conf.keyboardSteps = conf.keyboardSteps || conf.size;
 
 this.each(function() { 
 el = new Scrollable($(this), conf);
 $(this).data("scrollable", el); 
 });
 
 return conf.api ? el: this; 
 
 };
 
 
})(jQuery);

/**
 * jQuery TOOLS plugin :: scrollable.circular 0.5.1
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/scrollable.html#circular
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 *
 * Launch : September 2009
 * Date: ${date}
 * Revision: ${revision} 
 */
(function($) {

 // version number
 var t = $.tools.scrollable; 
 t.plugins = t.plugins || {};
 
 t.plugins.circular = {
 version: '0.5.1', 
 conf: { 
 api: false,
 clonedClass: 'cloned'
 } 
 };

 
 $.fn.circular = function(opts) {
 
 var config = $.extend({}, t.plugins.circular.conf), ret;
 $.extend(config, opts);
 
 this.each(function() { 
 
 var api = $(this).scrollable(),
 items = api.getItems(), 
 conf = api.getConf(), 
 wrap = api.getItemWrap(), 
 index = 0;
 
 if (api) { ret = api; }
 
 // too few items. no need for this plugin.
 if (items.length < conf.size) { return false; }
 

 // clone first visible elements and append them to the end 
 items.slice(0, conf.size).each(function(i) {
 $(this).clone().appendTo(wrap).click(function() {
 api.click(items.length + i);
 
 }).addClass(config.clonedClass); 
 }); 
 
 // clone last set of elements to the beginning in reversed order
 var tail = $.makeArray(items.slice(-conf.size)).reverse();
 
 $(tail).each(function(i) {
 $(this).clone().prependTo(wrap).click(function() {
 api.click(-i -1); 
 
 }).addClass(config.clonedClass); 
 });
 
 var allItems = wrap.children(conf.item);
 
 
 // reset hovering for cloned items too
 var hc = conf.hoverClass;
 
 if (hc) {
 allItems.hover(function() {
 $(this).addClass(hc); 
 }, function() {
 $(this).removeClass(hc); 
 }); 
 }
 
 // custom seeking function that does not trigger callbacks
 function seek(i) {
 
 var item = allItems.eq(i);
 
 if (conf.vertical) { 
 wrap.css({top: -item.position().top});
 } else {
 wrap.css({left: -item.position().left}); 
 } 
 }
 
 // skip the clones at the beginning
 seek(conf.size); 

 // overridden scrollable API methods
 $.extend(api, {

 move: function(offset, time, fn, click) {
 
 var to = index + offset + conf.size; 
 var exceed = to > api.getSize() - conf.size;
 
 
 if (to < 0 || exceed) {
 var fix = index + conf.size + (exceed ? -items.length : items.length);
 seek(fix);
 to = fix + offset;
 } 
 
 if (click) {
 allItems.removeClass(conf.activeClass)
 .eq(to + Math.floor(conf.size / 2)).addClass(conf.activeClass);
 }
 
 // nothing happens
 if (to === index + conf.size) { return self; } 

 return api.seekTo(to, time, fn);
 }, 
 
 begin: function(time, fn) {
 return this.seekTo(conf.size, time, fn); 
 },
 
 end: function(time, fn) { 
 return this.seekTo(items.length, time, fn); 
 },
 
 click: function(i, time, fn) { 
 
 if (!conf.clickable) { return self; }
 if (conf.size == 1) { return this.next(); }
 
 var to = i - index, klass = conf.activeClass; 
 to -= Math.floor(conf.size / 2); 
 
 return this.move(to, time, fn, true);
 },
 
 getIndex: function() {
 return index; 
 },
 
 setPage: function(page, time, fn) {
 return this.seekTo(page * conf.size + conf.size, time, fn); 
 },
 
 getPageAmount: function() {
 return Math.ceil(items.length / conf.size); 
 },
 
 getPageIndex: function() { 
 if (index < 0) { return this.getPageAmount() -1; }
 if (index >= items.length) { return 0; }
 return (index + conf.size) / conf.size -1;
 },

 getVisibleItems: function() {
 var i = index + conf.size;
 return allItems.slice(i, i + conf.size); 
 } 
 
 }); 
 
 // navi buttons are never disabled 
 api.onSeek(function(e, i) { 
 index = i - conf.size;
 
 // navi buttons are never disabled
 api.getNaviButtons().removeClass(conf.disabledClass);
 }); 
 
 api.getNaviButtons().removeClass(conf.disabledClass);
 
 });
 
 return config.api ? ret : this;
 
 };

 
})(jQuery);
 

/**
 * jQuery TOOLS plugin :: scrollable.autoscroll 1.0.1
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/scrollable.html#autoscroll
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 *
 * Launch : September 2009
 * Date: ${date}
 * Revision: ${revision} 
 */
(function($) { 

 var t = $.tools.scrollable; 
 t.plugins = t.plugins || {};
 
 t.plugins.autoscroll = {
 version: '1.0.1',
 
 conf: {
 autoplay: true,
 interval: 3000,
 autopause: true,
 steps: 1,
 api: false
 }
 }; 
 
 // jQuery plugin implementation
 $.fn.autoscroll = function(conf) { 

 if (typeof conf == 'number') {
 conf = {interval: conf}; 
 }
 
 var opts = $.extend({}, t.plugins.autoscroll.conf), ret;
 $.extend(opts, conf); 
 
 this.each(function() { 
 
 var api = $(this).scrollable(); 
 if (api) { ret = api; }
 
 // interval stuff
 var timer, hoverTimer, stopped = true;
 
 api.play = function() {
 
 // do not start additional timer if already exists
 if (timer) { return; }
 
 stopped = false;
 
 // construct new timer
 timer = setInterval(function() { 
 api.move(opts.steps); 
 }, opts.interval);
 
 api.move(opts.steps);
 }; 

 api.pause = function() {
 timer = clearInterval(timer); 
 };
 
 // when stopped - mouseover won't restart 
 api.stop = function() {
 api.pause();
 stopped = true; 
 };
 
 /* when mouse enters, autoscroll stops */
 if (opts.autopause) {
 api.getRoot().add(api.getNaviButtons()).hover(function() { 
 api.pause();
 clearInterval(hoverTimer);
 
 }, function() {
 if (!stopped) { 
 hoverTimer = setTimeout(api.play, opts.interval); 
 }
 });
 } 
 
 if (opts.autoplay) {
 setTimeout(api.play, opts.interval); 
 }

 });
 
 return opts.api ? ret : this;
 
 }; 
 
})(jQuery); 

/**
 * jQuery TOOLS plugin :: scrollable.navigator 1.0.2
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/scrollable.html#navigator
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 *
 * Launch : September 2009
 * Date: ${date}
 * Revision: ${revision} 
 */
(function($) {
 
 var t = $.tools.scrollable; 
 t.plugins = t.plugins || {};
 
 t.plugins.navigator = {
 version: '1.0.2',
 
 conf: {
 navi: '.navi',
 naviItem: null, 
 activeClass: 'active',
 indexed: false,
 api: false,
 idPrefix: null
 }
 }; 
 
 // jQuery plugin implementation
 $.fn.navigator = function(conf) {

 var globals = $.extend({}, t.plugins.navigator.conf), ret;
 if (typeof conf == 'string') { conf = {navi: conf}; }
 
 conf = $.extend(globals, conf);
 
 this.each(function() {
 
 var api = $(this).scrollable(),
 root = api.getRoot(), 
 navi = root.data("finder").call(null, conf.navi), 
 els = null, 
 buttons = api.getNaviButtons();
 
 if (api) { ret = api; }
 
 api.getNaviButtons = function() {
 return buttons.add(navi); 
 }; 
 
 // generate new entries
 function reload() {
 
 if (!navi.children().length || navi.data("navi") == api) {
 
 navi.empty();
 navi.data("navi", api);
 
 for (var i = 0; i < api.getPageAmount(); i++) { 
 navi.append($("<" + (conf.naviItem || 'a') + "/>"));
 }
 
 els = navi.children().each(function(i) {
 var el = $(this);
 el.click(function(e) {
 api.setPage(i); 
 return e.preventDefault();
 });
 
 // possible index number
 if (conf.indexed) { el.text(i); }
 if (conf.idPrefix) { el.attr("id", conf.idPrefix + i); }
 });
 
 
 // assign onClick events to existing entries
 } else {
 
 // find a entries first -> syntaxically correct
 els = conf.naviItem ? navi.find(conf.naviItem) : navi.children();
 
 els.each(function(i) {
 var el = $(this);
 
 el.click(function(evt) {
 api.setPage(i);
 return evt.preventDefault(); 
 });
 
 });
 }
 
 // activate first entry
 els.eq(0).addClass(conf.activeClass); 
 
 }
 
 // activate correct entry
 api.onStart(function(e, index) {
 var cls = conf.activeClass; 
 els.removeClass(cls).eq(api.getPageIndex()).addClass(cls);
 });
 
 api.onReload(function() {
 reload(); 
 });
 
 reload(); 
 
 // look for correct navi item from location.hash
 var el = els.filter("[href=" + location.hash + "]"); 
 if (el.length) { api.move(els.index(el)); } 
 
 
 }); 
 
 return conf.api ? ret : this;
 
 };
 
})(jQuery); 

/**
 * jQuery TOOLS plugin :: scrollable.mousewheel 1.0.1
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/scrollable.html#mousewheel
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 *
 * Launch : September 2009
 * Date: ${date}
 * Revision: ${revision} 
 *
 * 
 * jquery.event.wheel.js - rev 1 
 * Copyright (c) 2008, Three Dub Media (http://threedubmedia.com)
 * Liscensed under the MIT License (MIT-LICENSE.txt)
 * http://www.opensource.org/licenses/mit-license.php
 * Created: 2008-07-01 | Updated: 2008-07-14
 */
(function($) {
 
 $.fn.wheel = function( fn ){
 return this[ fn ? "bind" : "trigger" ]( "wheel", fn );
 };

 // special event config
 $.event.special.wheel = {
 setup: function(){
 $.event.add( this, wheelEvents, wheelHandler, {} );
 },
 teardown: function(){
 $.event.remove( this, wheelEvents, wheelHandler );
 }
 };

 // events to bind ( browser sniffed... )
 var wheelEvents = !$.browser.mozilla ? "mousewheel" : // IE, opera, safari
 "DOMMouseScroll"+( $.browser.version<"1.9" ? " mousemove" : "" ); // firefox

 // shared event handler
 function wheelHandler( event ) {
 
 switch ( event.type ){
 
 // FF2 has incorrect event positions
 case "mousemove": 
 return $.extend( event.data, { // store the correct properties
 clientX: event.clientX, clientY: event.clientY,
 pageX: event.pageX, pageY: event.pageY
 });
 
 // firefox 
 case "DOMMouseScroll": 
 $.extend( event, event.data ); // fix event properties in FF2
 event.delta = -event.detail / 3; // normalize delta
 break;
 
 // IE, opera, safari 
 case "mousewheel": 
 event.delta = event.wheelDelta / 120;
 break;
 }
 
 event.type = "wheel"; // hijack the event 
 return $.event.handle.call( this, event, event.delta );
 }
 
 
 // version number
 var t = $.tools.scrollable; 
 t.plugins = t.plugins || {};
 t.plugins.mousewheel = { 
 version: '1.0.1',
 conf: { 
 api: false,
 speed: 50
 } 
 }; 
 
 // scrollable mousewheel implementation
 $.fn.mousewheel = function(conf) {

 var globals = $.extend({}, t.plugins.mousewheel.conf), ret;
 if (typeof conf == 'number') { conf = {speed: conf}; }
 conf = $.extend(globals, conf);
 
 this.each(function() { 

 var api = $(this).scrollable();
 if (api) { ret = api; }
 
 api.getRoot().wheel(function(e, delta) { 
 api.move(delta < 0 ? 1 : -1, conf.speed || 50);
 return false;
 });
 });
 
 return conf.api ? ret : this;
 };
 
})(jQuery); 


/**
 * tools.overlay 1.1.2 - Overlay HTML with eye candy.
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/overlay.html
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 *
 * Launch : March 2008
 * Date: ${date}
 * Revision: ${revision} 
 */
(function($) { 

 // static constructs
 $.tools = $.tools || {};
 
 $.tools.overlay = {
 
 version: '1.1.2',
 
 addEffect: function(name, loadFn, closeFn) {
 effects[name] = [loadFn, closeFn]; 
 },
 
 conf: { 
 top: '10%', 
 left: 'center',
 absolute: false,
 
 speed: 'normal',
 closeSpeed: 'fast',
 effect: 'default',
 
 close: null, 
 oneInstance: true,
 closeOnClick: true,
 closeOnEsc: true, 
 api: false,
 expose: null,
 
 // target element to be overlayed. by default taken from [rel]
 target: null 
 }
 };

 
 var effects = {};
 
 // the default effect. nice and easy!
 $.tools.overlay.addEffect('default', 
 
 /* 
 onLoad/onClose functions must be called otherwise none of the 
 user supplied callback methods won't be called
 */
 function(onLoad) { 
 this.getOverlay().fadeIn(this.getConf().speed, onLoad); 
 
 }, function(onClose) {
 this.getOverlay().fadeOut(this.getConf().closeSpeed, onClose); 
 } 
 );
 
 
 var instances = []; 

 
 function Overlay(trigger, conf) { 
 
 // private variables
 var self = this, 
 $self = $(this),
 w = $(window), 
 closers,
 overlay,
 opened,
 expose = conf.expose && $.tools.expose.version;
 
 // get overlay and triggerr
 var jq = conf.target || trigger.attr("rel");
 overlay = jq ? $(jq) : null || trigger; 
 
 // overlay not found. cannot continue
 if (!overlay.length) { throw "Could not find Overlay: " + jq; }
 
 // if trigger is given - assign it's click event
 if (trigger && trigger.index(overlay) == -1) {
 trigger.click(function(e) { 
 self.load(e);
 return e.preventDefault();
 });
 } 
 
 // bind all callbacks from configuration
 $.each(conf, function(name, fn) {
 if ($.isFunction(fn)) { $self.bind(name, fn); }
 }); 
 
 
 // API methods 
 $.extend(self, {

 load: function(e) {
 
 // can be opened only once
 if (self.isOpened()) { return self; } 

 
 // find the effect
 var eff = effects[conf.effect];
 if (!eff) { throw "Overlay: cannot find effect : \"" + conf.effect + "\""; }
 
 // close other instances?
 if (conf.oneInstance) {
 $.each(instances, function() {
 this.close(e);
 });
 }
 
 // onBeforeLoad
 e = e || $.Event();
 e.type = "onBeforeLoad";
 $self.trigger(e); 
 if (e.isDefaultPrevented()) { return self; } 

 // opened
 opened = true;
 
 // possible expose effect
 if (expose) { overlay.expose().load(e); } 
 
 // calculate end position 
 var top = conf.top; 
 var left = conf.left;

 // get overlay dimensions
 var oWidth = overlay.outerWidth({margin:true});
 var oHeight = overlay.outerHeight({margin:true}); 
 
 if (typeof top == 'string') {
 top = top == 'center' ? Math.max((w.height() - oHeight) / 2, 0) : 
 parseInt(top, 10) / 100 * w.height(); 
 } 
 
 if (left == 'center') { left = Math.max((w.width() - oWidth) / 2, 0); }
 
 if (!conf.absolute) {
 top += w.scrollTop();
 left += w.scrollLeft();
 } 
 
 // position overlay
 overlay.css({top: top, left: left, position: 'absolute'}); 
 
 // onStart
 e.type = "onStart";
 $self.trigger(e); 
 
 // load effect 
 eff[0].call(self, function() { 
 if (opened) {
 e.type = "onLoad";
 $self.trigger(e);
 }
 }); 
 
 // when window is clicked outside overlay, we close
 if (conf.closeOnClick) { 
 $(document).bind("click.overlay", function(e) { 
 if (!self.isOpened()) { return; }
 var et = $(e.target); 
 if (et.parents(overlay).length > 1) { return; }
 $.each(instances, function() {
 this.close(e);
 }); 
 }); 
 } 
 
 // keyboard::escape
 if (conf.closeOnEsc) {
 
 // one callback is enough if multiple instances are loaded simultaneously
 $(document).unbind("keydown.overlay").bind("keydown.overlay", function(e) {
 if (e.keyCode == 27) {
 $.each(instances, function() {
 this.close(e); 
 }); 
 }
 }); 
 }

 return self; 
 }, 
 
 close: function(e) {

 if (!self.isOpened()) { return self; }
 
 e = e || $.Event();
 e.type = "onBeforeClose";
 $self.trigger(e); 
 if (e.isDefaultPrevented()) { return; } 
 
 opened = false;
 
 // close effect
 effects[conf.effect][1].call(self, function() {
 e.type = "onClose";
 $self.trigger(e); 
 });
 
 // if all instances are closed then we unbind the keyboard / clicking actions
 var allClosed = true;
 $.each(instances, function() {
 if (this.isOpened()) { allClosed = false; }
 }); 
 
 if (allClosed) {
 $(document).unbind("click.overlay").unbind("keydown.overlay"); 
 }
 
 
 return self;
 }, 
 
 // @deprecated
 getContent: function() {
 return overlay; 
 }, 
 
 getOverlay: function() {
 return overlay; 
 },
 
 getTrigger: function() {
 return trigger; 
 },
 
 getClosers: function() {
 return closers; 
 }, 

 isOpened: function() {
 return opened;
 },
 
 // manipulate start, finish and speeds
 getConf: function() {
 return conf; 
 },

 // bind
 bind: function(name, fn) {
 $self.bind(name, fn);
 return self; 
 }, 
 
 // unbind
 unbind: function(name) {
 $self.unbind(name);
 return self; 
 } 
 
 });
 
 // callbacks 
 $.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","), function(i, ev) {
 self[ev] = function(fn) {
 return self.bind(ev, fn); 
 };
 });
 
 
 // exposing effect
 if (expose) {
 
 // expose configuration
 if (typeof conf.expose == 'string') { conf.expose = {color: conf.expose}; }
 
 $.extend(conf.expose, {
 api: true,
 closeOnClick: conf.closeOnClick,
 
 // only overlay control's the esc button
 closeOnEsc: false
 });
 
 // initialize expose api
 var ex = overlay.expose(conf.expose);
 
 ex.onBeforeClose(function(e) {
 self.close(e); 
 });
 
 self.onClose(function(e) {
 ex.close(e); 
 });
 } 
 
 // close button
 closers = overlay.find(conf.close || ".close"); 
 
 if (!closers.length && !conf.close) {
 closers = $('<div class="close"></div>');
 overlay.prepend(closers); 
 } 
 
 closers.click(function(e) { 
 self.close(e); 
 }); 
 }
 
 // jQuery plugin initialization
 $.fn.overlay = function(conf) { 
 
 // already constructed --> return API
 var el = this.eq(typeof conf == 'number' ? conf : 0).data("overlay");
 if (el) { return el; } 
 
 if ($.isFunction(conf)) {
 conf = {onBeforeLoad: conf}; 
 }
 
 var globals = $.extend({}, $.tools.overlay.conf); 
 conf = $.extend(true, globals, conf);
 
 this.each(function() { 
 el = new Overlay($(this), conf);
 instances.push(el);
 $(this).data("overlay", el); 
 });
 
 return conf.api ? el: this; 
 }; 
 
})(jQuery);


/**
 * tools.expose 1.0.5 - Make HTML elements stand out
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/expose.html
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 *
 * Launch : June 2008
 * Date: ${date}
 * Revision: ${revision} 
 */
(function($) { 

 // static constructs
 $.tools = $.tools || {};
 
 $.tools.expose = {
 version: '1.0.5', 
 conf: { 

 // mask settings
 maskId: null,
 loadSpeed: 'slow',
 closeSpeed: 'fast',
 closeOnClick: true,
 closeOnEsc: true,
 
 // css settings
 zIndex: 9998,
 opacity: 0.8,
 color: '#456',
 api: false
 }
 };

 /* one of the greatest headaches in the tool. finally made it */
 function viewport() {
 
 // the horror case
 if ($.browser.msie) {
 
 // if there are no scrollbars then use window.height
 var d = $(document).height(), w = $(window).height();
 
 return [
 window.innerWidth || // ie7+
 document.documentElement.clientWidth || // ie6 
 document.body.clientWidth, // ie6 quirks mode
 d - w < 20 ? w : d
 ];
 } 
 
 // other well behaving browsers
 return [$(window).width(), $(document).height()];
 
 } 
 
 function Expose(els, conf) { 
 
 // private variables
 var self = this, $self = $(this), mask = null, loaded = false, origIndex = 0; 
 
 // bind all callbacks from configuration
 $.each(conf, function(name, fn) {
 if ($.isFunction(fn)) { $self.bind(name, fn); }
 }); 

 // adjust mask size when window is resized (or firebug is toggled)
 $(window).resize(function() {
 self.fit();
 }); 
 
 
 // public methods
 $.extend(this, {
 
 getMask: function() {
 return mask; 
 },
 
 getExposed: function() {
 return els; 
 },
 
 getConf: function() {
 return conf; 
 }, 
 
 isLoaded: function() {
 return loaded; 
 },
 
 load: function() { 
 
 // already loaded ?
 if (loaded) { return self; }
 
 origIndex = els.eq(0).css("zIndex"); 
 
 // find existing mask
 if (conf.maskId) { mask = $("#" + conf.maskId); }
 
 if (!mask || !mask.length) {
 
 var size = viewport();
 
 mask = $('<div/>').css({ 
 position:'absolute', 
 top:0, 
 left:0,
 width: size[0],
 height: size[1],
 display:'none',
 opacity: 0, 
 zIndex:conf.zIndex 
 }); 
 
 // id
 if (conf.maskId) { mask.attr("id", conf.maskId); } 
 
 $("body").append(mask); 
 
 
 // background color 
 var bg = mask.css("backgroundColor");
 
 if (!bg || bg == 'transparent' || bg == 'rgba(0, 0, 0, 0)') {
 mask.css("backgroundColor", conf.color); 
 } 
 
 // esc button
 if (conf.closeOnEsc) { 
 $(document).bind("keydown.unexpose", function(evt) { 
 if (evt.keyCode == 27) {
 self.close(); 
 } 
 }); 
 }
 
 // mask click closes
 if (conf.closeOnClick) {
 mask.bind("click.unexpose", function() {
 self.close(); 
 }); 
 } 
 } 
 
 // possibility to cancel click action
 var e = $.Event("onBeforeLoad");
 $self.trigger(e); 
 if (e.isDefaultPrevented()) { return self; }
 
 
 // make sure element is positioned absolutely or relatively
 $.each(els, function() {
 var el = $(this);
 if (!/relative|absolute|fixed/i.test(el.css("position"))) {
 el.css("position", "relative"); 
 } 
 });
 
 // make elements sit on top of the mask 
 els.css({zIndex:Math.max(conf.zIndex + 1, origIndex == 'auto' ? 0 : origIndex)}); 

 
 // reveal mask
 var h = mask.height();
 
 if (!this.isLoaded()) { 
 mask.css({opacity: 0, display: 'block'}).fadeTo(conf.loadSpeed, conf.opacity, function() {

 // sometimes IE6 misses the height property on fadeTo method
 if (mask.height() != h) { mask.css("height", h); } 
 $self.trigger("onLoad"); 
 
 }); 
 }
 
 loaded = true; 
 return self;
 }, 
 
 
 close: function() {
 
 if (!loaded) { return self; } 

 var e = $.Event("onBeforeClose");
 $self.trigger(e); 
 if (e.isDefaultPrevented()) { return self; }
 
 mask.fadeOut(conf.closeSpeed, function() {
 $self.trigger("onClose");
 els.css({zIndex: $.browser.msie ? origIndex : null});
 }); 
 
 loaded = false;
 return self; 
 },
 
 fit: function() {
 if (mask) {
 var size = viewport(); 
 mask.css({ width: size[0], height: size[1]});
 } 
 },
 
 bind: function(name, fn) {
 $self.bind(name, fn);
 return self; 
 }, 
 
 onBeforeLoad: function(fn) {
 return this.bind("onBeforeLoad", fn);
 },
 
 onLoad: function(fn) {
 return this.bind("onLoad", fn);
 },
 
 onBeforeClose: function(fn) {
 return this.bind("onBeforeClose", fn);
 },
 
 onClose: function(fn) {
 return this.bind("onClose", fn);
 },
 
 unbind: function(name) {
 $self.unbind(name);
 return self; 
 } 
 
 });

 }
 
 
 // jQuery plugin implementation
 $.fn.expose = function(conf) {
 
 var el = this.eq(typeof conf == 'number' ? conf : 0).data("expose");
 if (el) { return el; }
 
 if (typeof conf == 'string') {
 conf = {color: conf};
 }
 
 var globals = $.extend({}, $.tools.expose.conf);
 conf = $.extend(globals, conf); 

 // construct exposes
 this.each(function() {
 el = new Expose($(this), conf);
 $(this).data("expose", el); 
 }); 
 
 return conf.api ? el: this; 
 }; 


})(jQuery);

/**
 * tools.flashembed 1.0.4 - The future of Flash embedding.
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/flash-embed.html
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 *
 * Launch : March 2008
 * Date: ${date}
 * Revision: ${revision} 
 */ 
(function() { 
 
//{{{ utility functions 
 
var jQ = typeof jQuery == 'function';

var options = {
 
 // very common opts
 width: '100%',
 height: '100%', 
 
 // flashembed defaults
 allowfullscreen: true,
 allowscriptaccess: 'always',
 quality: 'high', 
 
 // flashembed specific options
 version: null,
 onFail: null,
 expressInstall: null, 
 w3c: false,
 cachebusting: false 
};

if (jQ) {
 
 // tools version number
 jQuery.tools = jQuery.tools || {};
 
 jQuery.tools.flashembed = { 
 version: '1.0.4', 
 conf: options
 }; 
}


// from "Pro JavaScript techniques" by John Resig
function isDomReady() {
 
 if (domReady.done) { return false; }
 
 var d = document;
 if (d && d.getElementsByTagName && d.getElementById && d.body) {
 clearInterval(domReady.timer);
 domReady.timer = null;
 
 for (var i = 0; i < domReady.ready.length; i++) {
 domReady.ready[i].call(); 
 }
 
 domReady.ready = null;
 domReady.done = true;
 } 
}

// if jQuery is present, use it's more effective domReady method
var domReady = jQ ? jQuery : function(f) {
 
 if (domReady.done) {
 return f(); 
 }
 
 if (domReady.timer) {
 domReady.ready.push(f); 
 
 } else {
 domReady.ready = [f];
 domReady.timer = setInterval(isDomReady, 13);
 } 
}; 


// override extend opts function 
function extend(to, from) {
 if (from) {
 for (key in from) {
 if (from.hasOwnProperty(key)) {
 to[key] = from[key];
 }
 }
 }
 
 return to;
} 


// JSON.asString() function
function asString(obj) {
 
 switch (typeOf(obj)){
 case 'string':
 obj = obj.replace(new RegExp('(["\\\\])', 'g'), '\\$1');
 
 // flash does not handle %- characters well. transforms "50%" to "50pct" (a dirty hack, I admit)
 obj = obj.replace(/^\s?(\d+)%/, "$1pct");
 return '"' +obj+ '"';
 
 case 'array':
 return '['+ map(obj, function(el) {
 return asString(el);
 }).join(',') +']'; 
 
 case 'function':
 return '"function()"';
 
 case 'object':
 var str = [];
 for (var prop in obj) {
 if (obj.hasOwnProperty(prop)) {
 str.push('"'+prop+'":'+ asString(obj[prop]));
 }
 }
 return '{'+str.join(',')+'}';
 }
 
 // replace ' --> " and remove spaces
 return String(obj).replace(/\s/g, " ").replace(/\'/g, "\"");
}


// private functions
function typeOf(obj) {
 if (obj === null || obj === undefined) { return false; }
 var type = typeof obj;
 return (type == 'object' && obj.push) ? 'array' : type;
}


// version 9 bugfix: (http://blog.deconcept.com/2006/07/28/swfobject-143-released/)
if (window.attachEvent) {
 window.attachEvent("onbeforeunload", function() {
 __flash_unloadHandler = function() {};
 __flash_savedUnloadHandler = function() {};
 });
}

function map(arr, func) {
 var newArr = []; 
 for (var i in arr) {
 if (arr.hasOwnProperty(i)) {
 newArr[i] = func(arr[i]);
 }
 }
 return newArr;
}
 
function getHTML(p, c) {
 
 var e = extend({}, p); 
 var ie = document.all; 
 var html = '<object width="' +e.width+ '" height="' +e.height+ '"';
 
 // force id for IE or Flash API cannot be returned
 if (ie && !e.id) {
 e.id = "_" + ("" + Math.random()).substring(9);
 }
 
 if (e.id) { 
 html += ' id="' + e.id + '"'; 
 }
 
 // prevent possible caching problems
 if (e.cachebusting) {
 e.src += ((e.src.indexOf("?") != -1 ? "&" : "?") + Math.random()); 
 } 
 
 if (e.w3c || !ie) {
 html += ' data="' +e.src+ '" type="application/x-shockwave-flash"'; 
 } else {
 html += ' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'; 
 }
 
 html += '>'; 
 
 if (e.w3c || ie) {
 html += '<param name="movie" value="' +e.src+ '" />'; 
 }

 // parameters
 e.width = e.height = e.id = e.w3c = e.src = null;
 
 for (var k in e) {
 if (e[k] !== null) {
 html += '<param name="'+ k +'" value="'+ e[k] +'" />';
 }
 } 

 // flashvars
 var vars = "";
 
 if (c) {
 for (var key in c) {
 if (c[key] !== null) {
 vars += key +'='+ (typeof c[key] == 'object' ? asString(c[key]) : c[key]) + '&';
 }
 }
 vars = vars.substring(0, vars.length -1);
 html += '<param name="flashvars" value=\'' + vars + '\' />';
 }
 
 html += "</object>"; 
 
 return html;

}

//}}}


function Flash(root, opts, flashvars) {
 
 var version = flashembed.getVersion(); 
 
 // API methods for callback
 extend(this, {
 
 getContainer: function() {
 return root; 
 },
 
 getConf: function() {
 return opts; 
 },
 
 getVersion: function() {
 return version; 
 }, 
 
 getFlashvars: function() {
 return flashvars; 
 }, 
 
 getApi: function() {
 return root.firstChild; 
 }, 
 
 getHTML: function() {
 return getHTML(opts, flashvars); 
 }
 
 });

 // variables 
 var required = opts.version; 
 var express = opts.expressInstall;
 
 
 // everything ok -> generate OBJECT tag 
 var ok = !required || flashembed.isSupported(required);
 
 if (ok) {
 opts.onFail = opts.version = opts.expressInstall = null;
 root.innerHTML = getHTML(opts, flashvars);
 
 // fail #1. express install
 } else if (required && express && flashembed.isSupported([6,65])) {
 
 extend(opts, {src: express});
 
 flashvars = {
 MMredirectURL: location.href,
 MMplayerType: 'PlugIn',
 MMdoctitle: document.title
 };
 
 root.innerHTML = getHTML(opts, flashvars); 
 
 // fail #2. 
 } else { 
 
 // fail #2.1 custom content inside container
 if (root.innerHTML.replace(/\s/g, '') !== '') {
 // minor bug fixed here 08.04.2008 (thanks JRodman) 
 
 // fail #2.2 default content
 } else { 
 root.innerHTML = 
 "<h2>Flash version " + required + " or greater is required</h2>" + 
 "<h3>" + 
 (version[0] > 0 ? "Your version is " + version : "You have no flash plugin installed") +
 "</h3>" + 
 
 (root.tagName == 'A' ? "<p>Click here to download latest version</p>" : 
 "<p>Download latest version from <a href='http://www.adobe.com/go/getflashplayer'>here</a></p>");
 
 if (root.tagName == 'A') { 
 root.onclick = function() {
 location.href= 'http://www.adobe.com/go/getflashplayer';
 };
 } 
 }
 }
 
 // onFail
 if (!ok && opts.onFail) {
 var ret = opts.onFail.call(this);
 if (typeof ret == 'string') { root.innerHTML = ret; } 
 }
 
 // http://flowplayer.org/forum/8/18186#post-18593
 if (document.all) {
 window[opts.id] = document.getElementById(opts.id);
 } 
 
}

window.flashembed = function(root, conf, flashvars) { 
 
//{{{ construction
 
 // root must be found / loaded 
 if (typeof root == 'string') {
 var el = document.getElementById(root);
 if (el) {
 root = el; 
 } else {
 domReady(function() {
 flashembed(root, conf, flashvars);
 });
 return; 
 } 
 }
 
 // not found
 if (!root) { return; }
 
 if (typeof conf == 'string') {
 conf = {src: conf}; 
 }
 
 var opts = extend({}, options);
 extend(opts, conf); 
 
 return new Flash(root, opts, flashvars);
 
//}}}
 
 
};


//{{{ static methods

extend(window.flashembed, {

 // returns arr[major, fix]
 getVersion: function() {
 
 var version = [0, 0];
 
 if (navigator.plugins && typeof navigator.plugins["Shockwave Flash"] == "object") {
 var _d = navigator.plugins["Shockwave Flash"].description;
 if (typeof _d != "undefined") {
 _d = _d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
 var _m = parseInt(_d.replace(/^(.*)\..*$/, "$1"), 10);
 var _r = /r/.test(_d) ? parseInt(_d.replace(/^.*r(.*)$/, "$1"), 10) : 0;
 version = [_m, _r];
 }
 
 } else if (window.ActiveXObject) {

 try { // avoid fp 6 crashes
 var _a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
 
 } catch(e) {
 
 try { 
 _a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
 version = [6, 0];
 _a.AllowScriptAccess = "always"; // throws if fp < 6.47 
 
 } catch(ee) {
 if (version[0] == 6) { return version; }
 }
 try {
 _a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
 } catch(eee) {
 
 }
 
 }
 
 if (typeof _a == "object") {
 _d = _a.GetVariable("$version"); // bugs in fp 6.21 / 6.23
 if (typeof _d != "undefined") {
 _d = _d.replace(/^\S+\s+(.*)$/, "$1").split(",");
 version = [parseInt(_d[0], 10), parseInt(_d[2], 10)];
 }
 }
 } 
 
 return version;
 },
 
 isSupported: function(version) {
 var now = flashembed.getVersion();
 var ret = (now[0] > version[0]) || (now[0] == version[0] && now[1] >= version[1]); 
 return ret;
 },
 
 domReady: domReady,
 
 // returns a String representation from JSON object 
 asString: asString,
 
 
 getHTML: getHTML
 
});

//}}}


// setup jquery support
if (jQ) {
 
 jQuery.fn.flashembed = function(conf, flashvars) {
 
 var el = null;
 
 this.each(function() { 
 el = flashembed(this, conf, flashvars);
 });
 
 return conf.api === false ? this : el; 
 };

}

})();

