/*
 * 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.1 - Tabs done rigth.
 * 
 * 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: 2009-06-12 11:02:45 +0000 (Fri, 12 Jun 2009)
 * Revision: 1911 
 */ 
(function($) {
 
 // static constructs
 $.tools = $.tools || {version: {}};
 
 $.tools.version.tabs = '1.0.1';
 
 $.tools.addTabEffect = function(name, fn) {
 effects[name] = fn;
 }; 
 
 
 var effects = { 
 'default': function(i) { 
 this.getPanes().hide().eq(i).show(); 
 }, 
 
 // custom configuration variable: fadeInSpeed
 fade: function(i) {
 this.getPanes().hide().eq(i).fadeIn(this.getConf().fadeInSpeed); 
 },
 
 slide: function(i) {
 this.getCurrentPane().slideUp("fast");
 this.getPanes().eq(i).slideDown(); 
 },

 horizontal: function(i) {
 
 // store original width of a pane into memory
 if (!$._hW) { $._hW = 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: $._hW}, function() { $(this).show(); }); 
 } 
 }; 
 

 function Tabs(tabs, panes, opts) { 
 
 var self = this;
 var current;

 // generic binding function
 function bind(name, fn) {
 $(self).bind(name, function(e, args) {
 if (fn && fn.call(this, args.index) === false && args) {
 args.proceed = false; 
 } 
 });
 return self;
 }
 
 // bind all callbacks from configuration
 $.each(opts, function(name, fn) {
 if ($.isFunction(fn)) { bind(name, fn); }
 });
 
 
 // public methods
 $.extend(this, { 
 click: function(i) {
 
 if (i === current) { return self; }
 
 var pane = self.getCurrentPane(); 
 var tab = tabs.eq(i); 
 
 if (typeof i == 'string') {
 tab = tabs.filter("[href=" +i+ "]");
 i = tabs.index(tab);
 }
 
 if (!tab.length) { 
 if (current >= 0) { return self; }
 i = opts.initialIndex;
 tab = tabs.eq(i);
 } 
 
 // possibility to cancel click action
 var args = {index: i, proceed: true};
 $(self).triggerHandler("onBeforeClick", args); 
 if (!args.proceed) { return self; } 
 
 tab.addClass(opts.current);
 
 // call the effect
 effects[opts.effect].call(self, i);
 
 // onClick callback
 $(self).triggerHandler("onClick", args); 
 
 tabs.removeClass(opts.current); 
 tab.addClass(opts.current); 
 current = i;
 return self;
 },
 
 getConf: function() {
 return opts; 
 },

 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); 
 }, 
 
 onBeforeClick: function(fn) {
 return bind("onBeforeClick", fn); 
 },
 
 onClick: function(fn) {
 return bind("onClick", fn); 
 } 
 
 });
 
 
 // setup click actions for each tab
 tabs.each(function(i) { 
 $(this).bind(opts.event, function(e) {
 self.click(i);
 if (!opts.history) { 
 return e.preventDefault();
 }
 }); 
 });
 
 // enable history plugin
 if (opts.history) {
 tabs.history(function(evt, hash) {
 self.click(hash || 0); 
 });
 }

 // if no pane is visible --> click on the first tab
 if (location.hash) {
 self.click(location.hash); 
 } else {
 self.click(opts.initialIndex); 
 } 
 
 // cross tab anchor link
 panes.find("a[href^=#]").click(function() {
 self.click($(this).attr("href")); 
 });
 
 }
 
 
 // jQuery plugin implementation
 $.fn.tabs = function(query, arg) {
 
 // return existing instance
 var el = this.eq(typeof conf == 'number' ? conf : 0).data("tabs");
 if (el) { return el; }

 
 // setup options
 var opts = {
 tabs: 'a',
 current: 'current',
 onBeforeClick: null,
 onClick: null, 
 effect: 'default',
 history: false,
 initialIndex: 0, 
 event: 'click',
 api:false
 };
 
 if ($.isFunction(arg)) {
 arg = {onBeforeClick: arg};
 }
 
 $.extend(opts, arg);
 
 // install tabs for each items in jQuery 
 this.each(function() { 
 var els = $(this).find(opts.tabs);
 
 if (!els.length) {
 els = $(this).children(); 
 }
 
 var panes = query.jquery ? query : $(query);

 el = new Tabs(els, panes, opts);
 $(this).data("tabs", el); 
 }); 
 
 return opts.api ? el: this; 
 }; 
 
}) (jQuery); 


//{{{ history plugin

/**
 * tools.history plugin. execute a callback when browser's 
 * back/forward buttons are pressed.
 * 
 * Can be used as a separate tool. Example:
 * 
 * $("ul.tabs a").history(function(hash) { 
 * 
 * }); 
 */
(function($) {
 
 var hash, iframe; 

 // jQuery plugin implementation
 $.prototype.history = function(fn) {
 
 var el = this;
 
 // IE
 if ($.browser.msie) {
 
 // create iframe that is constantly checked for hash changes
 if (!iframe) {
 iframe = $("<iframe />").hide().get(0);
 $("body").append(iframe);
 
 setInterval(function() {
 var idoc = iframe.contentWindow.document;
 var h = idoc.location.hash;
 
 if (hash !== h) { 
 $.event.trigger("hash", h);
 hash = h;
 }
 }, 100); 
 }
 
 // when link is clicked the iframe hash updated
 el.bind("click.hash", function(e) { 
 var doc = iframe.contentWindow.document;
 doc.open().close(); 
 doc.location.hash = $(this).attr("href");
 }); 
 
 // pseudoclick of the first item 
 el.eq(0).triggerHandler("click.hash");
 
 
 // other browsers scans for location.hash changes directly withou iframe hack
 } else { 
 setInterval(function() {
 var h = location.hash;
 
 if (el.filter("[href*=" + h + "]").length && h !== hash) {
 hash = h;
 $.event.trigger("hash", h);
 } 
 }, 100);
 }
 
 // bind a history listener
 $(window).bind("hash", fn);
 
 // return jQuery
 return this; 
 }; 
 

})(jQuery); 

//}}}


/**
 * tools.tooltip 1.0.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: 2009-06-12 11:02:45 +0000 (Fri, 12 Jun 2009)
 * Revision: 1911 
 */
(function($) { 

 // static constructs
 $.tools = $.tools || {version: {}};
 
 $.tools.version.tooltip = '1.0.2';
 
 
 var effects = { 
 toggle: [
 function() { this.getTip().show(); }, 
 function() { this.getTip().hide(); }
 ],
 
 fade: [
 function() { this.getTip().fadeIn(this.getConf().fadeInSpeed); }, 
 function() { this.getTip().fadeOut(this.getConf().fadeOutSpeed); } 
 ] 
 }; 
 
 
 $.tools.addTipEffect = function(name, loadFn, hideFn) {
 effects[name] = [loadFn, hideFn]; 
 };
 
 
 /* this is how you add custom effects */
 
 /*
 default effect: "slideup", custom configuration variables: 
 - slideOffset
 - slideInSpeed
 - slideOutSpeed
 */
 $.tools.addTipEffect("slideup", 
 
 function() { 
 var conf = this.getConf();
 var o = conf.slideOffset || 10;
 this.getTip().css({opacity:0}).animate({
 top: '-=' + o, 
 opacity:conf.opacity 
 }, conf.slideInSpeed || 200).show(); 
 }, 
 
 function() {
 var conf = this.getConf();
 var o = conf.slideOffset || 10;
 this.getTip().animate({top: '-=' + o, opacity:0}, conf.slideOutSpeed || 200, function() { 
 $(this).hide().animate({top: '+=' + (o * 2)}, 0);
 });
 }
 );

 function Tooltip(trigger, conf) {
 
 var self = this;
 
 // find the tip
 var tip = trigger.next(); 
 
 if (conf.tip) {
 
 // single tip. ie: #tip
 if (conf.tip.indexOf("#") != -1) {
 tip = $(conf.tip); 
 
 } else {
 
 // 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);
 }
 } 
 } 
 
 // generic binding function
 function bind(name, fn) {
 $(self).bind(name, function(e, args) {
 if (fn && fn.call(this) === false && args) {
 args.proceed = false; 
 } 
 }); 
 
 return self;
 }
 
 // bind all callbacks from configuration
 $.each(conf, function(name, fn) { 
 if ($.isFunction(fn)) { bind(name, fn); }
 }); 

 
 // mouse interaction 
 var isInput = trigger.is("input, textarea"); 
 trigger.bind(isInput ? "focus" : "mouseover", function(e) { 
 e.target = this; 
 self.show(e); 
 tip.hover(function() { self.show(); }, function() { self.hide(); }); 
 });
 
 trigger.bind(isInput ? "blur" : "mouseout", function() {
 self.hide(); 
 });

 tip.css("opacity", conf.opacity); 
 
 var timer = 0;
 
 $.extend(self, {
 
 show: function(e) {
 
 if (e) { trigger = $(e.target); }
 
 clearTimeout(timer);
 if (tip.is(":animated") || tip.is(":visible")) { return self; } 
 
 // onBeforeShow
 var p = {proceed: true};
 $(self).trigger("onBeforeShow", p); 
 if (!p.proceed) { return self; }

 
 
 /* calculate tip position */ 
 
 // vertical axis
 var top = trigger.position().top - tip.outerHeight(); 
 var height = tip.outerHeight() + trigger.outerHeight(); 
 var pos = conf.position[0]; 
 if (pos == 'center') { top += height / 2; }
 if (pos == 'bottom') { top += height; }
 
 
 // horizontal axis
 var width = trigger.outerWidth() + tip.outerWidth();
 var left = trigger.position().left + trigger.outerWidth(); 
 pos = conf.position[1];
 
 
 if (pos == 'center') { left -= width / 2; }
 if (pos == 'left') { left -= width; } 
 
 // offset
 top += conf.offset[0];
 left += conf.offset[1];
 
 // set position
 tip.css({position:'absolute', top: top, left: left});

 
 effects[conf.effect][0].call(self);
 $(self).trigger("onShow");
 return self;
 },
 
 hide: function() { 
 clearTimeout(timer); 
 
 timer = setTimeout(function() {
 if (!tip.is(":visible")) { return self; }
 
 // onBeforeHide
 var p = {proceed: true};
 $(self).trigger("onBeforeHide", p); 
 if (!p.proceed) { return self; }

 
 effects[conf.effect][1].call(self); 
 $(self).trigger("onHide");
 
 }, conf.delay || 1); 

 return self;
 },
 
 isShown: function() {
 return tip.is(":visible, :animated"); 
 },
 
 getConf: function() {
 return conf; 
 },
 
 getTip: function() {
 return tip; 
 },
 
 getTrigger: function() {
 return trigger; 
 },
 
 // callback functions
 onBeforeShow: function(fn) {
 return bind("onBeforeShow", fn); 
 },
 
 onShow: function(fn) {
 return bind("onShow", fn); 
 },
 
 onBeforeHide: function(fn) {
 return bind("onBeforeHide", fn); 
 },
 
 onHide: function(fn) {
 return bind("onHide", fn); 
 } 

 });
 
 }
 
 
 // jQuery plugin implementation
 $.prototype.tooltip = function(conf) {
 
 // return existing instance
 var el = this.eq(typeof conf == 'number' ? conf : 0).data("tooltip");
 if (el) { return el; }
 
 // setup options
 var opts = { 

 /* 
 - slideOffset
 - slideInSpeed
 - slideOutSpeed 
 */ 
 
 tip: null,
 effect: 'slideup',
 delay: 30,
 opacity: 1, 
 
 // 'top', 'bottom', 'right', 'left', 'center'
 position: ['top', 'center'], 
 offset: [0, 0], 
 api: false 
 };
 
 if ($.isFunction(conf)) {
 conf = {onBeforeShow: conf};
 }
 
 $.extend(opts, conf);
 
 // install tabs for each items in jQuery
 this.each(function() {
 el = new Tooltip($(this), opts);
 $(this).data("tooltip", el); 
 });
 

 return opts.api ? el: this; 
 
 };
 
}) (jQuery);

 


/**
 * jquery.scrollable 1.0.5 - 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: 2009-06-12 11:02:45 +0000 (Fri, 12 Jun 2009)
 * Revision: 1911 
 */
(function($) {
 
 // static constructs
 $.tools = $.tools || {version: {}};
 
 $.tools.version.scrollable = '1.0.5';
 
 var current = null; 

 
 // constructor
 function Scrollable(root, conf) { 

 // current instance
 var self = this; 
 if (!current) { current = self; } 
 
 // generic binding function
 function bind(name, fn) {
 $(self).bind(name, function(e, args) {
 if (fn && fn.call(this, args.index) === false && args) {
 args.proceed = false; 
 } 
 }); 
 
 return self;
 }
 
 // bind all callbacks from configuration
 $.each(conf, function(name, fn) {
 if ($.isFunction(fn)) { bind(name, fn); }
 }); 
 
 
 // horizontal flag
 var horizontal = !conf.vertical; 
 
 // wrap (root elements for items)
 var wrap = $(conf.items, root); 
 
 // current index
 var index = 0; 
 
 function find(query, ctx) {
 return query.indexOf("#") != -1 ? $(query).eq(0) : ctx.siblings(query).eq(0); 
 } 
 
 // get handle to navigational elements
 var navi = find(conf.navi, root);
 var prev = find(conf.prev, root);
 var next = find(conf.next, root);
 var prevPage = find(conf.prevPage, root);
 var nextPage = find(conf.nextPage, root);
 
 
 // methods
 $.extend(self, {
 
 getIndex: function() {
 return index; 
 },
 
 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); 
 },

 getRoot: function() {
 return root; 
 },
 
 getItemWrap: function() {
 return wrap; 
 },
 
 getItems: function() {
 return wrap.children(); 
 },
 
 getVisibleItems: function() {
 return self.getItems().slice(index, index + conf.size); 
 },
 
 /* all seeking functions depend on this */ 
 seekTo: function(i, time, fn) {
 
 // default speed
 if (time === undefined) { time = conf.speed; }
 
 // function given as second argument
 if ($.isFunction(time)) {
 fn = time;
 time = conf.speed;
 }
 
 if (i < 0) { i = 0; } 
 if (i > self.getSize() - conf.size) { return self; } 

 var item = self.getItems().eq(i); 
 if (!item.length) { return self; } 
 
 
 // onBeforeSeek
 var p = {index: i, proceed: true};
 $(self).trigger("onBeforeSeek", p); 
 if (!p.proceed) { return self; }
 
 
 if (horizontal) {
 var left = -item.position().left; 
 wrap.animate({left: left}, time, conf.easing, fn ? function() { fn.call(self); } : null);
 
 } else {
 var top = -item.position().top; 
 wrap.animate({top: top}, time, conf.easing, fn ? function() { fn.call(self); } : null); 
 } 
 
 
 // navi status update
 if (navi.length) {
 var klass = conf.activeClass;
 var page = Math.ceil(i / conf.size);
 page = Math.min(page, navi.children().length - 1);
 navi.children().removeClass(klass).eq(page).addClass(klass);
 } 
 
 // prev buttons disabled flag
 if (i === 0) {
 prev.add(prevPage).addClass(conf.disabledClass); 
 } else {
 prev.add(prevPage).removeClass(conf.disabledClass);
 }
 
 // next buttons disabled flag
 if (i >= self.getSize() - conf.size) {
 next.add(nextPage).addClass(conf.disabledClass);
 } else {
 next.add(nextPage).removeClass(conf.disabledClass);
 } 
 
 current = self;
 index = i; 
 
 // onSeek after index being updated
 $(self).trigger("onSeek", {index: i}); 
 return self; 
 }, 
 
 
 move: function(offset, time, fn) {
 var to = index + offset;
 if (conf.loop && to > (self.getSize() - conf.size)) {
 to = 0; 
 }
 return this.seekTo(to, 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) {
 return this.move(conf.size * offset, time, fn); 
 },
 
 setPage: function(page, time, fn) {
 var size = conf.size;
 var index = size * page;
 var lastPage = index + size >= this.getSize(); 
 if (lastPage) {
 index = this.getSize() - conf.size;
 }
 return this.seekTo(index, time, fn);
 },
 
 prevPage: function(time, fn) {
 return this.setPage(this.getPageIndex() - 1, time, fn);
 }, 
 
 nextPage: function(time, fn) {
 return this.setPage(this.getPageIndex() + 1, time, fn);
 }, 
 
 begin: function(time, fn) {
 return this.seekTo(0, time, fn); 
 },
 
 end: function(time, fn) {
 return this.seekTo(this.getSize() - conf.size, time, fn); 
 },
 
 reload: function() {
 return load(); 
 },
 
 click: function(index, time, fn) {
 
 var item = self.getItems().eq(index);
 var klass = conf.activeClass; 
 
 // check that index is sane
 if (index < 0 || index >= this.getSize()) { return self; }
 
 
 // special case with two items
 if (conf.size == 2) {
 if (index == self.getIndex()) { index--; }
 self.getItems().removeClass(klass);
 item.addClass(klass); 
 return this.seekTo(index, time, fn);
 }
 

 if (!item.hasClass(klass)) { 
 self.getItems().removeClass(klass);
 item.addClass(klass);
 var delta = Math.floor(conf.size / 2);
 var to = index - delta;

 // next to last item must work
 if (to > self.getSize() - conf.size) { 
 to = self.getSize() - conf.size; 
 }
 
 if (to !== index) {
 return this.seekTo(to, time, fn); 
 } 
 }
 
 return self;
 },

 // callback functions
 onBeforeSeek: function(fn) {
 return bind("onBeforeSeek", fn); 
 },
 
 onSeek: function(fn) {
 return bind("onSeek", fn); 
 }
 
 });
 
 
 // mousewheel
 if ($.isFunction($.fn.mousewheel)) { 
 root.bind("mousewheel.scrollable", function(e, delta) {
 // opera goes to opposite direction
 var step = $.browser.opera ? 1 : -1;
 
 self.move(delta > 0 ? step : -step, 50);
 return false;
 });
 } 
 
 // 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(); 
 });
 

 // next page button
 prevPage.addClass(conf.disabledClass).click(function() { 
 self.prevPage(); 
 }); 

 
 // keyboard
 if (conf.keyboard) { 

 // keyboard works on one instance at the time. thus we need to unbind first
 $(document).unbind("keydown.scrollable").bind("keydown.scrollable", function(evt) {
 
 var el = current; 
 if (!el || evt.altKey || evt.ctrlKey) { return; }
 
 if (horizontal && (evt.keyCode == 37 || evt.keyCode == 39)) { 
 el.move(evt.keyCode == 37 ? -1 : 1);
 return evt.preventDefault();
 } 
 
 if (!horizontal && (evt.keyCode == 38 || evt.keyCode == 40)) {
 el.move(evt.keyCode == 38 ? -1 : 1);
 return evt.preventDefault();
 }
 
 return true;
 
 }); 
 }

 // navi 
 function load() { 
 
 // generate new entries
 if (navi.is(":empty") || navi.data("me") == self) {
 
 navi.empty();
 navi.data("me", self);
 
 for (var i = 0; i < self.getPageAmount(); i++) { 
 
 var item = $("<" + conf.naviItem + "/>").attr("href", i).click(function(e) { 
 var el = $(this);
 el.parent().children().removeClass(conf.activeClass);
 el.addClass(conf.activeClass);
 self.setPage(el.attr("href"));
 return e.preventDefault();
 });
 
 if (i === 0) { item.addClass(conf.activeClass); }
 navi.append(item); 
 }
 
 // assign onClick events to existing entries
 } else {
 
 // find a entries first -> syntaxically correct
 var els = navi.children(); 
 
 els.each(function(i) {
 var item = $(this);
 item.attr("href", i);
 if (i === 0) { item.addClass(conf.activeClass); }
 
 item.click(function() {
 navi.find("." + conf.activeClass).removeClass(conf.activeClass);
 item.addClass(conf.activeClass);
 self.setPage(item.attr("href"));
 });
 
 });
 }
 
 
 // item.click()
 if (conf.clickable) {
 self.getItems().each(function(index, arg) {
 var el = $(this);
 if (!el.data("set")) {
 el.bind("click.scrollable", function() {
 self.click(index); 
 });
 el.data("set", true);
 }
 }); 
 }
 
 
 // hover
 if (conf.hoverClass) {
 self.getItems().hover(function() {
 $(this).addClass(conf.hoverClass); 
 }, function() {
 $(this).removeClass(conf.hoverClass); 
 });
 } 
 
 return self;
 }
 
 load();
 
 
 // interval stuff
 var timer = null;

 function setTimer() {

 // do not start additional timer if already exists
 if (timer) { return; }
 
 // construct new timer
 timer = setInterval(function() {
 
 // check if interval is being changed dynamically during runtime
 if (conf.interval === 0) { 
 clearInterval(timer);
 timer = 0;
 return;
 } 
 
 self.next(); 
 }, conf.interval);
 } 
 
 if (conf.interval > 0) { 
 
 // when mouse enters, autoscroll stops
 root.hover(function() { 
 clearInterval(timer); 
 timer = 0;
 
 }, function() { 
 setTimer(); 
 });
 
 setTimer(); 
 }
 
 } 

 
 // 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 opts = {
 
 // basics
 size: 5,
 vertical:false, 
 clickable: true,
 loop: false,
 interval: 0, 
 speed: 400,
 keyboard: true, 
 
 // other
 activeClass:'active',
 disabledClass: 'disabled',
 hoverClass: null, 
 easing: 'swing',
 
 // navigational elements
 items: '.items',
 prev: '.prev',
 next: '.next',
 prevPage: '.prevPage',
 nextPage: '.nextPage', 
 navi: '.navi',
 naviItem: 'a',
 api:false,

 
 // callbacks
 onBeforeSeek: null,
 onSeek: null
 
 }; 
 
 
 $.extend(opts, conf); 
 
 this.each(function() { 
 el = new Scrollable($(this), opts);
 $(this).data("scrollable", el); 
 });
 
 return opts.api ? el: this; 
 
 };
 
 
})(jQuery);

/**
 * tools.overlay 1.0.4 - 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: 2009-06-12 11:02:45 +0000 (Fri, 12 Jun 2009)
 * Revision: 1911 
 */
(function($) { 

 // static constructs
 $.tools = $.tools || {version: {}};
 
 $.tools.version.overlay = '1.0.4';
 
 
 var instances = []; 

 
 function Overlay(el, opts) { 
 
 // private variables
 var self = this, w = $(window), closeButton, img, oWidth, oHeight, trigger, bg, exposeApi;
 var expose = opts.expose && $.tools.version.expose;
 
 // generic binding function
 function bind(name, fn) {
 $(self).bind(name, function(e, args) {
 if (fn && fn.call(this) === false && args) {
 args.proceed = false; 
 } 
 }); 
 return self;
 }
 
 // bind all callbacks from configuration
 $.each(opts, function(name, fn) {
 if ($.isFunction(fn)) { bind(name, fn); }
 }); 
 
 
 // get trigger and overlayed element
 var jq = opts.target || el.attr("rel");
 var o = jq ? $(jq) : null;

 if (!o) { o = el; } 
 else { trigger = el; }
 
 
 // external CSS properties are accessible only on window.onLoad (safari / chrome)
 w.load(function() { 
 
 // get growing image
 bg = o.attr("overlay");
 
 // growing image is required (on this version) 
 if (!bg) { 
 bg = o.css("backgroundImage");
 
 if (!bg) { 
 throw "background-image CSS property not set for overlay element: " + jq; 
 }
 
 // url("bg.jpg") --> bg.jpg
 bg = bg.substring(bg.indexOf("(") + 1, bg.indexOf(")")).replace(/\"/g, "");
 o.css("backgroundImage", "none");
 o.attr("overlay", bg); 
 } 
 
 // set initial growing image properties
 oWidth = o.outerWidth({margin:true});
 oHeight = o.outerHeight({margin:true});
 
 // setup growing image
 img = $('<img src="' + bg + '"/>'); 
 img.css({border:0,position:'absolute',display:'none'}).width(oWidth).attr("overlay", true); 
 $('body').append(img); 
 
 
 // if trigger is given - assign it's click event
 if (trigger) {
 trigger.bind("click.overlay", function(e) {
 self.load(e.pageY - w.scrollTop(), e.pageX - w.scrollLeft());
 return e.preventDefault();
 });
 } 
 
 // close button
 opts.close = opts.close || ".close";
 
 if (!o.find(opts.close).length) { 
 o.prepend('<div class="close"></div>');
 } 
 
 closeButton = o.find(opts.close);
 
 closeButton.bind("click.overlay", function() { 
 self.close(); 
 }); 
 
 // automatic preloading of the image
 if (opts.preload) {
 setTimeout(function() {
 var img = new Image();
 img.src = bg; 
 }, 2000);
 } 
 
 });

 
 // API methods 
 $.extend(self, {

 load: function(top, left) {
 
 // lazy loading if things are not setup yet
 if (!img) { 
 w.load(function() {
 self.load(top, left); 
 });
 return self;
 }
 
 // one instance visible at once
 if (self.isOpened()) {
 return self; 
 }
 
 if (opts.oneInstance) {
 $.each(instances, function() {
 this.close();
 });
 }
 
 // onBeforeLoad
 var p = {proceed: true};
 $(self).trigger("onBeforeLoad", p); 
 if (!p.proceed) { return self; } 

 // exposing effect
 if (expose) {
 img.expose(opts.expose);
 exposeApi = img.expose().load();
 } 
 
 // start position 
 top = top || opts.start.top; 
 left = left || opts.start.left; 
 
 // finish position 
 var toTop = opts.finish.top;
 var toLeft = opts.finish.left;
 
 if (toTop == 'center') { toTop = Math.max((w.height() - oHeight) / 2, 0); }
 if (toLeft == 'center') { toLeft = Math.max((w.width() - oWidth) / 2, 0); }
 
 // adjust positioning relative to scrolling position
 if (!opts.start.absolute) {
 top += w.scrollTop();
 left += w.scrollLeft();
 }
 
 if (!opts.finish.absolute) {
 toTop += w.scrollTop();
 toLeft += w.scrollLeft();
 }
 
 // initialize background image 
 img.css({top:top, left:left, width: opts.start.width, zIndex: opts.zIndex}).show();
 
 
 // begin growing
 img.animate({top:toTop, left:toLeft, width: oWidth}, opts.speed, function() { 
 
 // set content on top of the image
 o.css({position:'absolute', top:toTop, left:toLeft}); 
 var z = img.css("zIndex");
 closeButton.add(o).css("zIndex", ++z);
 
 o.fadeIn(opts.fadeInSpeed, function() { 
 $(self).trigger("onLoad"); 
 });
 
 }); 
 
 return self; 
 }, 
 
 close: function() {
 
 if (!self.isOpened()) { return self; }
 
 var p = {proceed: true};
 $(self).trigger("onBeforeClose", p); 
 if (!p.proceed) { return self; }
 
 // close exposing effect
 if (exposeApi) { exposeApi.close(); }
 
 if (img.is(":visible")) {
 
 // hide overlayed content
 o.hide();
 
 // calculate triggers position
 var top = opts.start.top; 
 var left = opts.start.left;
 
 if (trigger) {
 p = trigger.offset();
 top = p.top + trigger.height() / 2;
 left = p.left + trigger.width() / 2;
 } 
 
 // shrink image
 img.animate({top: top, left: left, width:0 }, opts.closeSpeed, function() {
 $(self).trigger("onClose", p); 
 }); 
 }
 
 return self;
 },
 
 
 getBackgroundImage: function() {
 return img; 
 },
 
 getContent: function() {
 return o; 
 }, 
 
 getTrigger: function() {
 return trigger; 
 },

 isOpened: function() {
 return o.is(":visible") ;
 },
 
 // manipulate start, finish and speeds
 getConf: function() {
 return opts; 
 },

 // callback functions
 onBeforeLoad: function(fn) {
 return bind("onBeforeLoad", fn); 
 },
 
 onLoad: function(fn) {
 return bind("onLoad", fn); 
 },
 
 onBeforeClose: function(fn) {
 return bind("onBeforeClose", fn); 
 },
 
 onClose: function(fn) {
 return bind("onClose", fn); 
 } 
 
 }); 
 
 
 // keyboard::escape
 $(document).keydown(function(evt) {
 if (evt.keyCode == 27) { 
 self.close(); 
 }
 }); 

 
 // when window is clicked outside overlay, we close
 if (opts.closeOnClick) { 
 $(document).bind("click.overlay", function(evt) {
 if (!o.is(":visible, :animated")) { return; }
 var target = $(evt.target);
 if (target.attr("overlay")) { return; }
 if (target.parents("[overlay]").length) { return; }
 self.close(); 
 }); 
 } 
 
 }
 
 // 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; } 
 
 var w = $(window); 
 
 var opts = { 
 
 /* 
 - onBeforeLoad 
 - onLoad
 - onBeforeClose 
 - onClose 
 */ 
 
 start: {
 // by default: button position || window center
 top: Math.round(w.height() / 2), 
 left: Math.round(w.width() / 2), 
 width: 0,
 absolute: false
 },
 
 finish: {
 top: 80, 
 left: 'center',
 absolute: false
 }, 
 
 speed: 'normal',
 fadeInSpeed: 'fast',
 closeSpeed: 'fast',
 
 close: null, 
 oneInstance: true,
 closeOnClick: true, 
 preload: true, 
 zIndex: 9999,
 api: false,
 expose: null,
 
 // target element to be overlayed. by default taken from [rel]
 target: null
 };
 
 if ($.isFunction(conf)) {
 conf = {onBeforeLoad: conf}; 
 }
 
 $.extend(true, opts, conf); 
 
 
 this.each(function() { 
 el = new Overlay($(this), opts);
 instances.push(el);
 $(this).data("overlay", el); 
 });
 
 return opts.api ? el: this; 
 }; 
 
})(jQuery);


/**
 * tools.expose 1.0.3 - 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: 2009-06-12 11:02:45 +0000 (Fri, 12 Jun 2009)
 * Revision: 1911 
 */
(function($) { 

 // static constructs
 $.tools = $.tools || {version: {}};
 
 $.tools.version.expose = '1.0.3';
 
 function getWidth() {
 
 var w = $(window).width();
 
 if ($.browser.mozilla) { return w; }
 
 var x;
 
 if (window.innerHeight && window.scrollMaxY) {
 x = window.innerWidth + window.scrollMaxX; 
 
 // all but Explorer Mac 
 } else if (document.body.scrollHeight > document.body.offsetHeight) { 
 x = document.body.scrollWidth;
 
 } else {
 x = document.body.offsetWidth;
 }
 
 return x < w ? x + 20 : w; 
 }
 
 function Expose(els, opts) { 
 
 // private variables
 var self = this, mask = null, loaded = false, origIndex = 0; 
 
 // generic binding function
 function bind(name, fn) {
 $(self).bind(name, function(e, args) {
 if (fn && fn.call(this) === false && args) {
 args.proceed = false; 
 } 
 }); 
 return self;
 } 
 
 // bind all callbacks from configuration
 $.each(opts, function(name, fn) {
 if ($.isFunction(fn)) { bind(name, fn); }
 }); 
 

 // adjust mask size when window is resized (or firebug is toggled)
 $(window).bind("resize.expose", function() {
 if (mask) {
 mask.css({ width: getWidth(), height: $(document).height()});
 }
 }); 
 
 
 // public methods
 $.extend(this, {
 
 getMask: function() {
 return mask; 
 },
 
 getExposed: function() {
 return els; 
 },
 
 getConf: function() {
 return opts; 
 }, 
 
 isLoaded: function() {
 return loaded; 
 },
 
 load: function() { 
 
 // already loaded ?
 if (loaded) { return self; }
 
 origIndex = els.eq(0).css("zIndex"); 
 
 // find existing mask
 if (opts.maskId) { mask = $("#" + opts.maskId); }
 
 if (!mask || !mask.length) {
 
 mask = $('<div/>').css({ 
 position:'absolute', 
 top:0, 
 left:0,
 width: getWidth(),
 height: $(document).height(),
 display:'none',
 opacity: 0, 
 zIndex:opts.zIndex 
 }); 
 
 // id
 if (opts.maskId) { mask.attr("id", opts.maskId); } 
 
 $("body").append(mask); 
 
 
 // background color 
 var bg = mask.css("backgroundColor");
 
 if (!bg || bg == 'transparent' || bg == 'rgba(0, 0, 0, 0)') {
 mask.css("backgroundColor", opts.color); 
 } 
 
 // esc button
 if (opts.closeOnEsc) { 
 $(document).bind("keydown.unexpose", function(evt) { 
 if (evt.keyCode == 27) {
 self.close(); 
 } 
 }); 
 }
 
 // mask click closes
 if (opts.closeOnClick) {
 mask.bind("click.unexpose", function() {
 self.close(); 
 }); 
 } 
 } 
 
 // possibility to cancel click action
 var p = {proceed: true};
 $(self).trigger("onBeforeLoad", p); 
 if (!p.proceed) { 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:opts.zIndex + 1}); 

 
 // reveal mask
 var h = mask.height();
 
 if (!this.isLoaded()) { 
 mask.css({opacity: 0, display: 'block'}).fadeTo(opts.loadSpeed, opts.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 p = {proceed: true};
 $(self).trigger("onBeforeClose", p); 
 if (p.proceed === false) { return self; }
 
 mask.fadeOut(opts.closeSpeed, function() {
 $(self).trigger("onClose");
 els.css({zIndex: $.browser.msie ? origIndex : null});
 }); 
 
 loaded = false;
 return self; 
 },
 
 
 onBeforeLoad: function(fn) {
 return bind("onBeforeLoad", fn); 
 },
 
 onLoad: function(fn) {
 return bind("onLoad", fn); 
 },
 
 onBeforeClose: function(fn) {
 return bind("onBeforeClose", fn); 
 },
 
 onClose: function(fn) {
 return bind("onClose", fn); 
 } 
 
 });

 }
 
 
 // jQuery plugin implementation
 $.fn.expose = function(conf) {
 
 var el = this.eq(typeof conf == 'number' ? conf : 0).data("expose");
 if (el) { return el; }
 
 var opts = {
 /*
 - onBeforeLoad 
 - onLoad
 - onBeforeClose 
 - onClose 
 */ 

 // mask settings
 maskId: null,
 loadSpeed: 'slow',
 closeSpeed: 'fast',
 closeOnClick: true,
 closeOnEsc: true,
 
 // css settings
 zIndex: 9998,
 opacity: 0.8,
 color: '#456',
 api: false
 };
 
 if (typeof conf == 'string') {
 conf = {color: conf};
 }
 
 $.extend(opts, conf); 

 // construct exposes
 this.each(function() {
 el = new Expose($(this), opts);
 $(this).data("expose", el); 
 }); 
 
 return opts.api ? el: this; 
 }; 


})(jQuery);

/** 
 * flowplayer.js 3.1.1. The Flowplayer API
 * 
 * Copyright 2009 Flowplayer Oy
 * 
 * This file is part of Flowplayer.
 * 
 * Flowplayer is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * Flowplayer is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with Flowplayer. If not, see <http://www.gnu.org/licenses/>.
 * 
 * Date: 2009-02-25 16:24:29 -0500 (Wed, 25 Feb 2009)
 * Revision: 166 
 */
(function() {
 
/* 
 FEATURES 
 --------
 - $f() and flowplayer() functions 
 - handling multiple instances 
 - Flowplayer programming API 
 - Flowplayer event model 
 - player loading / unloading 
 - jQuery support
*/ 
 

/*jslint glovar: true, browser: true */
/*global flowplayer, $f */

// {{{ private utility methods
 
 function log(args) {
 console.log("$f.fireEvent", [].slice.call(args)); 
 }

 
 // thanks: http://keithdevens.com/weblog/archive/2007/Jun/07/javascript.clone
 function clone(obj) { 
 if (!obj || typeof obj != 'object') { return obj; } 
 var temp = new obj.constructor(); 
 for (var key in obj) { 
 if (obj.hasOwnProperty(key)) {
 temp[key] = clone(obj[key]);
 }
 } 
 return temp;
 }

 // stripped from jQuery, thanks John Resig 
 function each(obj, fn) {
 if (!obj) { return; }
 
 var name, i = 0, length = obj.length;
 
 // object
 if (length === undefined) {
 for (name in obj) {
 if (fn.call(obj[name], name, obj[name]) === false) { break; }
 }
 
 // array
 } else {
 for (var value = obj[0];
 i < length && fn.call( value, i, value ) !== false; value = obj[++i]) { 
 }
 }
 
 return obj;
 }

 
 // convenience
 function el(id) {
 return document.getElementById(id); 
 } 

 
 // used extensively. a very simple implementation. 
 function extend(to, from, skipFuncs) {
 if (typeof from != 'object') { return to; }
 
 if (to && from) { 
 each(from, function(name, value) {
 if (!skipFuncs || typeof value != 'function') {
 to[name] = value; 
 }
 });
 }
 
 return to;
 }
 
 // var arr = select("elem.className"); 
 function select(query) {
 var index = query.indexOf("."); 
 if (index != -1) {
 var tag = query.substring(0, index) || "*";
 var klass = query.substring(index + 1, query.length);
 var els = [];
 each(document.getElementsByTagName(tag), function() {
 if (this.className && this.className.indexOf(klass) != -1) {
 els.push(this); 
 }
 });
 return els;
 }
 }
 
 // fix event inconsistencies across browsers
 function stopEvent(e) {
 e = e || window.event;
 
 if (e.preventDefault) {
 e.stopPropagation();
 e.preventDefault();
 
 } else {
 e.returnValue = false; 
 e.cancelBubble = true;
 } 
 return false;
 }

 // push an event listener into existing array of listeners
 function bind(to, evt, fn) {
 to[evt] = to[evt] || [];
 to[evt].push(fn); 
 }
 
 
 // generates an unique id
 function makeId() {
 return "_" + ("" + Math.random()).substring(2, 10); 
 }
 
//}}} 
 

// {{{ Clip

 var Clip = function(json, index, player) {
 
 // private variables
 var self = this;
 var cuepoints = {};
 var listeners = {}; 
 self.index = index;
 
 // instance variables
 if (typeof json == 'string') {
 json = {url:json}; 
 }
 
 extend(this, json, true); 
 
 // event handling 
 each(("Begin*,Start,Pause*,Resume*,Seek*,Stop*,Finish*,LastSecond,Update,BufferFull,BufferEmpty,BufferStop").split(","),
 function() {
 
 var evt = "on" + this;
 
 // before event
 if (evt.indexOf("*") != -1) {
 evt = evt.substring(0, evt.length -1); 
 var before = "onBefore" + evt.substring(2); 
 
 self[before] = function(fn) {
 bind(listeners, before, fn);
 return self;
 }; 
 } 
 
 self[evt] = function(fn) {
 bind(listeners, evt, fn);
 return self;
 };
 
 
 // set common clip event listeners to player level
 if (index == -1) {
 if (self[before]) {
 player[before] = self[before]; 
 } 
 if (self[evt]) {
 player[evt] = self[evt]; 
 }
 }
 
 }); 
 
 extend(this, { 
 
 onCuepoint: function(points, fn) { 
 
 // embedded cuepoints
 if (arguments.length == 1) {
 cuepoints.embedded = [null, points];
 return self;
 }
 
 if (typeof points == 'number') {
 points = [points]; 
 }
 
 var fnId = makeId(); 
 cuepoints[fnId] = [points, fn]; 
 
 if (player.isLoaded()) {
 player._api().fp_addCuepoints(points, index, fnId); 
 } 
 
 return self;
 },
 
 update: function(json) {
 extend(self, json);

 if (player.isLoaded()) {
 player._api().fp_updateClip(json, index); 
 }
 var conf = player.getConfig(); 
 var clip = (index == -1) ? conf.clip : conf.playlist[index];
 extend(clip, json, true);
 },
 
 
 // internal event for performing clip tasks. should be made private someday
 _fireEvent: function(evt, arg1, arg2, target) { 
 
 if (evt == 'onLoad') { 
 each(cuepoints, function(key, val) {
 if (val[0]) {
 player._api().fp_addCuepoints(val[0], index, key); 
 }
 }); 
 return false;
 }
 
 // target clip we are working against
 target = target || self; 
 
 if (evt == 'onCuepoint') {
 var fn = cuepoints[arg1];
 if (fn) {
 return fn[1].call(player, target, arg2);
 }
 } 
 
 if (evt == 'onStart' || evt == 'onUpdate' || evt == 'onResume') {
 
 extend(target, arg1); 
 
 if (!target.duration) {
 target.duration = arg1.metaData.duration; 
 } else {
 target.fullDuration = arg1.metaData.duration; 
 } 
 } 
 
 var ret = true;
 each(listeners[evt], function() {
 ret = this.call(player, target, arg1, arg2); 
 }); 
 return ret; 
 } 
 
 });
 
 
 // get cuepoints from config
 if (json.onCuepoint) {
 var arg = json.onCuepoint;
 self.onCuepoint.apply(self, typeof arg == 'function' ? [arg] : arg);
 delete json.onCuepoint;
 } 
 
 // get other events
 each(json, function(key, val) {
 if (typeof val == 'function') {
 bind(listeners, key, val);
 delete json[key]; 
 }
 });

 
 // setup common clip event callbacks for Player object too (shortcuts)
 if (index == -1) {
 player.onCuepoint = this.onCuepoint; 
 }
 
 };

//}}}


// {{{ Plugin
 
 var Plugin = function(name, json, player, fn) {
 
 var listeners = {};
 var self = this; 
 var hasMethods = false;
 
 if (fn) {
 extend(listeners, fn); 
 } 
 
 // custom callback functions in configuration
 each(json, function(key, val) {
 if (typeof val == 'function') {
 listeners[key] = val;
 delete json[key]; 
 }
 }); 
 
 // core plugin methods 
 extend(this, {
 
 // speed and fn are optional
 animate: function(props, speed, fn) { 
 if (!props) {
 return self; 
 }
 
 if (typeof speed == 'function') { 
 fn = speed; 
 speed = 500;
 }
 
 if (typeof props == 'string') {
 var key = props;
 props = {};
 props[key] = speed;
 speed = 500; 
 }
 
 if (fn) {
 var fnId = makeId();
 listeners[fnId] = fn;
 }
 
 if (speed === undefined) { speed = 500; }
 json = player._api().fp_animate(name, props, speed, fnId); 
 return self;
 },
 
 css: function(props, val) {
 if (val !== undefined) {
 var css = {};
 css[props] = val;
 props = css; 
 }
 json = player._api().fp_css(name, props);
 extend(self, json);
 return self;
 },
 
 show: function() {
 this.display = 'block';
 player._api().fp_showPlugin(name);
 return self;
 },
 
 hide: function() {
 this.display = 'none';
 player._api().fp_hidePlugin(name);
 return self;
 },
 
 // toggle between visible / hidden state
 toggle: function() {
 this.display = player._api().fp_togglePlugin(name);
 return self;
 }, 
 
 fadeTo: function(o, speed, fn) {
 
 if (typeof speed == 'function') { 
 fn = speed; 
 speed = 500;
 }
 
 if (fn) {
 var fnId = makeId();
 listeners[fnId] = fn;
 } 
 this.display = player._api().fp_fadeTo(name, o, speed, fnId);
 this.opacity = o;
 return self;
 },
 
 fadeIn: function(speed, fn) { 
 return self.fadeTo(1, speed, fn); 
 },
 
 fadeOut: function(speed, fn) {
 return self.fadeTo(0, speed, fn); 
 },
 
 getName: function() {
 return name; 
 },
 
 getPlayer: function() {
 return player; 
 },
 
 // internal method. should be made private some day
 _fireEvent: function(evt, arg, arg2) {
 
 // update plugins properties & methods
 if (evt == 'onUpdate') {
 var json = player._api().fp_getPlugin(name); 
 if (!json) { return; } 
 
 extend(self, json);
 delete self.methods;
 
 if (!hasMethods) {
 each(json.methods, function() {
 var method = "" + this; 
 
 self[method] = function() {
 var a = [].slice.call(arguments);
 var ret = player._api().fp_invoke(name, method, a); 
 return ret == 'undefined' ? self : ret;
 };
 });
 hasMethods = true; 
 }
 }
 
 // plugin callbacks
 var fn = listeners[evt];

 if (fn) {
 fn.apply(self, arg);
 
 // "one-shot" callback
 if (evt.substring(0, 1) == "_") {
 delete listeners[evt]; 
 } 
 } 
 } 
 
 });

 };


//}}}


function Player(wrapper, params, conf) { 
 
 // private variables (+ arguments)
 var 
 self = this, 
 api = null, 
 html, 
 commonClip, 
 playlist = [], 
 plugins = {},
 listeners = {},
 playerId,
 apiId,
 
 // n'th player on the page
 playerIndex,
 
 // active clip's index number
 activeIndex,
 
 swfHeight,
 wrapperHeight; 

 
// {{{ public methods 
 
 extend(self, {
 
 id: function() {
 return playerId; 
 }, 
 
 isLoaded: function() {
 return (api !== null); 
 },
 
 getParent: function() {
 return wrapper; 
 },
 
 hide: function(all) {
 if (all) { wrapper.style.height = "0px"; }
 if (api) { api.style.height = "0px"; } 
 return self;
 },

 show: function() {
 wrapper.style.height = wrapperHeight + "px";
 if (api) { api.style.height = swfHeight + "px"; }
 return self;
 }, 
 
 isHidden: function() {
 return api && parseInt(api.style.height, 10) === 0;
 },
 
 
 load: function(fn) { 
 
 if (!api && self._fireEvent("onBeforeLoad") !== false) {
 
 // unload all instances
 each(players, function() {
 this.unload(); 
 });
 
 html = wrapper.innerHTML; 
 
 // do not use splash as alternate content for flashembed
 if (html && !flashembed.isSupported(params.version)) {
 wrapper.innerHTML = ""; 
 } 
 
 // install Flash object inside given container
 flashembed(wrapper, params, {config: conf});
 
 // onLoad listener given as argument
 if (fn) {
 fn.cached = true;
 bind(listeners, "onLoad", fn); 
 }
 }
 
 return self; 
 },
 
 unload: function() {
 
 // check that API is sane
 try {
 if (!api || api.fp_isFullscreen()) { return self; } 
 } catch (error) {
 return self;
 }
 
 // unload only if in splash state
 if (html.replace(/\s/g,'') !== '') {
 
 if (self._fireEvent("onBeforeUnload") === false) {
 return self;
 } 
 api.fp_close();
 api = null; 
 wrapper.innerHTML = html; 
 self._fireEvent("onUnload");
 } 
 
 return self;
 
 },
 
 getClip: function(index) {
 if (index === undefined) {
 index = activeIndex; 
 }
 return playlist[index];
 },
 
 
 getCommonClip: function() {
 return commonClip; 
 }, 
 
 getPlaylist: function() {
 return playlist; 
 },
 
 getPlugin: function(name) { 
 var plugin = plugins[name];
 
 // create plugin if nessessary
 if (!plugin && self.isLoaded()) {
 var json = self._api().fp_getPlugin(name);
 if (json) {
 plugin = new Plugin(name, json, self);
 plugins[name] = plugin; 
 } 
 } 
 return plugin; 
 },
 
 getScreen: function() { 
 return self.getPlugin("screen");
 }, 
 
 getControls: function() { 
 return self.getPlugin("controls");
 }, 

 getConfig: function(copy) { 
 return copy ? clone(conf) : conf;
 },
 
 getFlashParams: function() { 
 return params;
 }, 
 
 loadPlugin: function(name, url, props, fn) { 

 // properties not supplied 
 if (typeof props == 'function') { 
 fn = props; 
 props = {};
 } 
 
 // if fn not given, make a fake id so that plugin's onUpdate get's fired
 var fnId = fn ? makeId() : "_"; 
 self._api().fp_loadPlugin(name, url, props, fnId); 
 
 // create new plugin
 var arg = {};
 arg[fnId] = fn;
 var p = new Plugin(name, null, self, arg);
 plugins[name] = p;
 return p; 
 },
 
 
 getState: function() {
 return api ? api.fp_getState() : -1;
 },
 
 // "lazy" play
 play: function(clip, instream) {
 
 function play() {
 if (clip !== undefined) {
 self._api().fp_play(clip, instream);
 } else {
 self._api().fp_play(); 
 }
 }
 
 if (api) {
 play();
 
 } else {
 self.load(function() { 
 play();
 });
 }
 
 return self;
 },
 
 getVersion: function() {
 var js = "flowplayer.js 3.1.1";
 if (api) {
 var ver = api.fp_getVersion();
 ver.push(js);
 return ver;
 }
 return js; 
 },
 
 _api: function() {
 if (!api) {
 throw "Flowplayer " +self.id()+ " not loaded when calling an API method";
 }
 return api; 
 },
 
 setClip: function(clip) {
 self.setPlaylist([clip]);
 return self;
 },
 
 getIndex: function() {
 return playerIndex; 
 }
 
 }); 
 
 
 // event handlers
 each(("Click*,Load*,Unload*,Keypress*,Volume*,Mute*,Unmute*,PlaylistReplace,ClipAdd,Fullscreen*,FullscreenExit,Error").split(","),
 function() { 
 var name = "on" + this;
 
 // before event
 if (name.indexOf("*") != -1) {
 name = name.substring(0, name.length -1); 
 var name2 = "onBefore" + name.substring(2);
 self[name2] = function(fn) {
 bind(listeners, name2, fn); 
 return self;
 }; 
 }
 
 // normal event
 self[name] = function(fn) {
 bind(listeners, name, fn); 
 return self;
 }; 
 }
 ); 
 
 
 // core API methods
 each(("pause,resume,mute,unmute,stop,toggle,seek,getStatus,getVolume,setVolume,getTime,isPaused,isPlaying,startBuffering,stopBuffering,isFullscreen,toggleFullscreen,reset,close,setPlaylist,addClip").split(","), 
 function() { 
 var name = this;
 
 self[name] = function(a1, a2) {
 if (!api) { return self; }
 var ret = null;
 
 // two arguments
 if (a1 !== undefined && a2 !== undefined) { 
 ret = api["fp_" + name](a1, a2);
 
 } else { 
 ret = (a1 === undefined) ? api["fp_" + name]() : api["fp_" + name](a1);
 }
 
 return ret == 'undefined' ? self : ret;
 }; 
 }
 ); 
 
//}}}


// {{{ public method: _fireEvent
 
 self._fireEvent = function(a) { 
 
 if (typeof a == 'string') { a = [a]; }
 
 var evt = a[0], arg0 = a[1], arg1 = a[2], arg2 = a[3], i = 0; 
 
 if (conf.debug) { log(a); } 
 
 // internal onLoad
 if (!api && evt == 'onLoad' && arg0 == 'player') { 
 
 api = api || el(apiId); 
 swfHeight = api.clientHeight;
 
 each(playlist, function() {
 this._fireEvent("onLoad"); 
 });
 
 each(plugins, function(name, p) {
 p._fireEvent("onUpdate"); 
 }); 
 
 commonClip._fireEvent("onLoad"); 
 }
 
 // other onLoad events are skipped
 if (evt == 'onLoad' && arg0 != 'player') { return; }
 
 
 // "normalize" error handling
 if (evt == 'onError') { 
 if (typeof arg0 == 'string' || (typeof arg0 == 'number' && typeof arg1 == 'number')) {
 arg0 = arg1;
 arg1 = arg2;
 } 
 }
 
 
 if (evt == 'onContextMenu') {
 each(conf.contextMenu[arg0], function(key, fn) {
 fn.call(self);
 });
 return;
 }

 if (evt == 'onPluginEvent') { 
 var name = arg0.name || arg0;
 var p = plugins[name];

 if (p) {
 p._fireEvent("onUpdate", arg0);
 p._fireEvent(arg1, a.slice(3)); 
 }
 return;
 } 

 // replace whole playlist
 if (evt == 'onPlaylistReplace') {
 playlist = [];
 var index = 0;
 each(arg0, function() {
 playlist.push(new Clip(this, index++, self));
 }); 
 }
 
 // insert new clip to the playlist. arg0 = clip, arg1 = index 
 if (evt == 'onClipAdd') {
 
 // instream clip additions are ignored at this point
 if (arg0.isInStream) { return; }
 
 // add new clip into playlist 
 arg0 = new Clip(arg0, arg1, self);
 playlist.splice(arg1, 0, arg0);
 
 // increment index variable for the rest of the clips on playlist 
 for (i = arg1 + 1; i < playlist.length; i++) {
 playlist[i].index++; 
 }
 }
 
 
 var ret = true;
 
 // clip event
 if (typeof arg0 == 'number' && arg0 < playlist.length) {
 
 activeIndex = arg0;
 var clip = playlist[arg0]; 

 if (clip) {
 ret = clip._fireEvent(evt, arg1, arg2); 
 } 
 
 if (!clip || ret !== false) {

 // clip argument is given for common clip, because it behaves as the target
 ret = commonClip._fireEvent(evt, arg1, arg2, clip); 
 } 
 } 
 
 // trigger player event
 each(listeners[evt], function() {
 ret = this.call(self, arg0, arg1); 
 
 // remove cached entry
 if (this.cached) {
 listeners[evt].splice(i, 1); 
 }
 
 // break loop
 if (ret === false) { return false; }
 i++;
 
 }); 

 return ret;
 };

//}}}
 

// {{{ init
 
 function init() {
 
 // replace previous installation 
 if ($f(wrapper)) {
 $f(wrapper).getParent().innerHTML = ""; 
 playerIndex = $f(wrapper).getIndex();
 players[playerIndex] = self;
 
 // register this player into global array of instances
 } else {
 players.push(self);
 playerIndex = players.length -1;
 }
 
 wrapperHeight = parseInt(wrapper.style.height, 10) || wrapper.clientHeight; 
 
 // flashembed parameters
 if (typeof params == 'string') {
 params = {src: params}; 
 } 
 
 // playerId 
 playerId = wrapper.id || "fp" + makeId();
 apiId = params.id || playerId + "_api"; 
 params.id = apiId;
 conf.playerId = playerId;
 

 // plain url is given as config
 if (typeof conf == 'string') {
 conf = {clip:{url:conf}}; 
 } 
 
 if (typeof conf.clip == 'string') {
 conf.clip = {url: conf.clip}; 
 }
 
 // common clip is always there
 conf.clip = conf.clip || {}; 
 
 
 // wrapper href as common clip's url
 if (wrapper.getAttribute("href", 2) && !conf.clip.url) { 
 conf.clip.url = wrapper.getAttribute("href", 2); 
 } 
 
 commonClip = new Clip(conf.clip, -1, self); 
 
 // playlist
 conf.playlist = conf.playlist || [conf.clip]; 
 
 var index = 0;
 
 each(conf.playlist, function() {
 
 var clip = this; 
 
 /* sometimes clip is given as array. this is not accepted. */
 if (typeof clip == 'object' && clip.length) {
 clip = {url: "" + clip}; 
 } 
 
 // populate common clip properties to each clip
 each(conf.clip, function(key, val) {
 if (val !== undefined && clip[key] === undefined && typeof val != 'function') {
 clip[key] = val; 
 }
 }); 
 
 // modify playlist in configuration
 conf.playlist[index] = clip; 
 
 // populate playlist array
 clip = new Clip(clip, index, self);
 playlist.push(clip); 
 index++; 
 }); 
 
 // event listeners
 each(conf, function(key, val) {
 if (typeof val == 'function') {
 bind(listeners, key, val);
 delete conf[key]; 
 }
 }); 
 
 
 // plugins
 each(conf.plugins, function(name, val) {
 if (val) {
 plugins[name] = new Plugin(name, val, self);
 }
 });
 
 
 // setup controlbar plugin if not explicitly defined
 if (!conf.plugins || conf.plugins.controls === undefined) {
 plugins.controls = new Plugin("controls", null, self); 
 }
 
 // setup canvas as plugin
 plugins.canvas = new Plugin("canvas", null, self);
 
 
 // Flowplayer uses black background by default
 params.bgcolor = params.bgcolor || "#000000";
 
 
 // setup default settings for express install
 params.version = params.version || [9, 0]; 
 params.expressInstall = 'http://www.flowplayer.org/swf/expressinstall.swf';
 
 
 // click function
 function doClick(e) { 
 if (!self.isLoaded() && self._fireEvent("onBeforeClick") !== false) {
 self.load(); 
 } 
 return stopEvent(e); 
 }
 
 // defer loading upon click
 html = wrapper.innerHTML;
 if (html.replace(/\s/g, '') !== '') { 
 
 if (wrapper.addEventListener) {
 wrapper.addEventListener("click", doClick, false); 
 
 } else if (wrapper.attachEvent) {
 wrapper.attachEvent("onclick", doClick); 
 }
 
 // player is loaded upon page load 
 } else {
 
 // prevent default action from wrapper. (fixes safari problems)
 if (wrapper.addEventListener) {
 wrapper.addEventListener("click", stopEvent, false); 
 }
 
 // load player
 self.load();
 }
 }

 // possibly defer initialization until DOM get's loaded
 if (typeof wrapper == 'string') { 
 flashembed.domReady(function() {
 var node = el(wrapper); 
 
 if (!node) {
 throw "Flowplayer cannot access element: " + wrapper; 
 } else {
 wrapper = node; 
 init(); 
 } 
 });
 
 // we have a DOM element so page is already loaded
 } else { 
 init();
 }
 
 
//}}}


}


// {{{ flowplayer() & statics 

// container for player instances
var players = [];


// this object is returned when multiple player's are requested 
function Iterator(arr) {
 
 this.length = arr.length;
 
 this.each = function(fn) {
 each(arr, fn); 
 };
 
 this.size = function() {
 return arr.length; 
 }; 
}

// these two variables are the only global variables
window.flowplayer = window.$f = function() {

 var instance = null;
 var arg = arguments[0]; 
 
 // $f()
 if (!arguments.length) {
 each(players, function() {
 if (this.isLoaded()) {
 instance = this; 
 return false;
 }
 });
 
 return instance || players[0];
 } 
 
 if (arguments.length == 1) {
 
 // $f(index);
 if (typeof arg == 'number') { 
 return players[arg]; 
 
 
 // $f(wrapper || 'containerId' || '*');
 } else {
 
 // $f("*");
 if (arg == '*') {
 return new Iterator(players); 
 }
 
 // $f(wrapper || 'containerId');
 each(players, function() {
 if (this.id() == arg.id || this.id() == arg || this.getParent() == arg) {
 instance = this; 
 return false;
 }
 });
 
 return instance; 
 }
 } 

 // instance builder 
 if (arguments.length > 1) { 

 var swf = arguments[1];
 var conf = (arguments.length == 3) ? arguments[2] : {};
 
 if (typeof arg == 'string') {
 
 // select arg by classname
 if (arg.indexOf(".") != -1) {
 var instances = [];
 
 each(select(arg), function() { 
 instances.push(new Player(this, clone(swf), clone(conf))); 
 }); 
 
 return new Iterator(instances);
 
 // select node by id
 } else { 
 var node = el(arg);
 return new Player(node !== null ? node : arg, swf, conf); 
 } 
 
 
 // arg is a DOM element
 } else if (arg) {
 return new Player(arg, swf, conf); 
 }
 
 } 
 
 return null; 
};
 
extend(window.$f, {

 // called by Flash External Interface 
 fireEvent: function() {
 var a = [].slice.call(arguments);
 var p = $f(a[0]); 
 return p ? p._fireEvent(a.slice(1)) : null;
 },
 
 
 // create plugins by modifying Player's prototype
 addPlugin: function(name, fn) {
 Player.prototype[name] = fn;
 return $f;
 },
 
 // utility methods for plugin developers
 each: each,
 
 extend: extend
 
});


/* sometimes IE leaves sockets open (href="javascript:..." links break this)
if (document.all) {
 window.onbeforeunload = function(e) { 
 $f("*").each(function() {
 if (this.isLoaded()) {
 this.close(); 
 }
 });
 }; 
}
*/

 
//}}}


//{{{ jQuery support

if (typeof jQuery == 'function') {
 
 jQuery.prototype.flowplayer = function(params, conf) { 
 
 // select instances
 if (!arguments.length || typeof arguments[0] == 'number') {
 var arr = [];
 this.each(function() {
 var p = $f(this);
 if (p) {
 arr.push(p); 
 }
 });
 return arguments.length ? arr[arguments[0]] : new Iterator(arr);
 }
 
 // create flowplayer instances
 return this.each(function() { 
 $f(this, clone(params), conf ? clone(conf) : {}); 
 }); 
 
 };
 
}

//}}}


})();
/**
 * tools.flashembed 1.0.2 - 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: 2009-01-14 00:41:14 -0500 (Wed, 14 Jan 2009)
 * Revision: 1314 
 */ 
(function() { 
 
//{{{ utility functions 
 
var jQ = typeof jQuery == 'function';

// 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
 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; }


 // setup opts
 var opts = {
 
 // 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
 };
 
 
 if (typeof conf == 'string') {
 conf = {src: conf}; 
 }
 
 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; }
 }
 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) {
 
 // tools version number
 jQuery.tools = jQuery.tools || {version: {}}; 
 jQuery.tools.version.flashembed = '1.0.2'; 

 
 jQuery.fn.flashembed = function(conf, flashvars) {
 
 var el = null;
 
 this.each(function() { 
 el = flashembed(this, conf, flashvars);
 });
 
 return conf.api === false ? this : el; 
 };

}

})();


