/*
 * 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")}})})();
/*! Copyright (c) 2008 Brandon Aaron (http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * Version: 1.0.3
 * Requires jQuery 1.1.3+
 * Docs: http://docs.jquery.com/Plugins/livequery
 */

var preventSubmitEvent = false;

(function($) {
	
$.extend($.fn, {
	livequery: function(type, fn, fn2) {
		var self = this, q;
		
		// Handle different call patterns
		if ($.isFunction(type))
			fn2 = fn, fn = type, type = undefined;
			
		// See if Live Query already exists
		$.each( $.livequery.queries, function(i, query) {
			if ( self.selector == query.selector && self.context == query.context &&
				type == query.type && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) )
					// Found the query, exit the each loop
					return (q = query) && false;
		});
		
		// Create new Live Query if it wasn't found
		q = q || new $.livequery(this.selector, this.context, type, fn, fn2);
		
		// Make sure it is running
		q.stopped = false;
		
		// Run it immediately for the first time
		q.run();
		
		// Contnue the chain
		return this;
	},
	
	expire: function(type, fn, fn2) {
		var self = this;
		
		// Handle different call patterns
		if ($.isFunction(type))
			fn2 = fn, fn = type, type = undefined;
			
		// Find the Live Query based on arguments and stop it
		$.each( $.livequery.queries, function(i, query) {
			if ( self.selector == query.selector && self.context == query.context && 
				(!type || type == query.type) && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) && !this.stopped )
					$.livequery.stop(query.id);
		});
		
		// Continue the chain
		return this;
	}
});

$.livequery = function(selector, context, type, fn, fn2) {
	this.selector = selector;
	this.context  = context || document;
	this.type     = type;
	this.fn       = fn;
	this.fn2      = fn2;
	this.elements = [];
	this.stopped  = false;
	
	// The id is the index of the Live Query in $.livequery.queries
	this.id = $.livequery.queries.push(this)-1;
	
	// Mark the functions for matching later on
	fn.$lqguid = fn.$lqguid || $.livequery.guid++;
	if (fn2) fn2.$lqguid = fn2.$lqguid || $.livequery.guid++;
	
	// Return the Live Query
	return this;
};

$.livequery.prototype = {
	stop: function() {
		var query = this;
		
		if ( this.type )
			// Unbind all bound events
			this.elements.unbind(this.type, this.fn);
		else if (this.fn2)
			// Call the second function for all matched elements
			this.elements.each(function(i, el) {
				query.fn2.apply(el);
			});
			
		// Clear out matched elements
		this.elements = [];
		
		// Stop the Live Query from running until restarted
		this.stopped = true;
	},
	
	run: function() {
		// Short-circuit if stopped
		if ( this.stopped ) return;
		var query = this;
		
		var oEls = this.elements,
			els  = $(this.selector, this.context),
			nEls = els.not(oEls);
		
		// Set elements to the latest set of matched elements
		this.elements = els;
		
		if (this.type) {
			// Bind events to newly matched elements
			nEls.bind(this.type, this.fn);
			
			// Unbind events to elements no longer matched
			if (oEls.length > 0)
				$.each(oEls, function(i, el) {
					if ( $.inArray(el, els) < 0 )
						$.event.remove(el, query.type, query.fn);
				});
		}
		else {
			// Call the first function for newly matched elements
			nEls.each(function() {
				query.fn.apply(this);
			});
			
			// Call the second function for elements no longer matched
			if ( this.fn2 && oEls.length > 0 )
				$.each(oEls, function(i, el) {
					if ( $.inArray(el, els) < 0 )
						query.fn2.apply(el);
				});
		}
	}
};

$.extend($.livequery, {
	guid: 0,
	queries: [],
	queue: [],
	running: false,
	timeout: null,
	
	checkQueue: function() {
		if ( $.livequery.running && $.livequery.queue.length ) {
			var length = $.livequery.queue.length;
			// Run each Live Query currently in the queue
			while ( length-- )
				$.livequery.queries[ $.livequery.queue.shift() ].run();
		}
	},
	
	pause: function() {
		// Don't run anymore Live Queries until restarted
		$.livequery.running = false;
	},
	
	play: function() {
		// Restart Live Queries
		$.livequery.running = true;
		// Request a run of the Live Queries
		$.livequery.run();
	},
	
	registerPlugin: function() {
		$.each( arguments, function(i,n) {
			// Short-circuit if the method doesn't exist
			if (!$.fn[n]) return;
			
			// Save a reference to the original method
			var old = $.fn[n];
			
			// Create a new method
			$.fn[n] = function() {
				// Call the original method
				var r = old.apply(this, arguments);
				
				// Request a run of the Live Queries
				$.livequery.run();
				
				// Return the original methods result
				return r;
			}
		});
	},
	
	run: function(id) {
		if (id != undefined) {
			// Put the particular Live Query in the queue if it doesn't already exist
			if ( $.inArray(id, $.livequery.queue) < 0 )
				$.livequery.queue.push( id );
		}
		else
			// Put each Live Query in the queue if it doesn't already exist
			$.each( $.livequery.queries, function(id) {
				if ( $.inArray(id, $.livequery.queue) < 0 )
					$.livequery.queue.push( id );
			});
		
		// Clear timeout if it already exists
		if ($.livequery.timeout) clearTimeout($.livequery.timeout);
		// Create a timeout to check the queue and actually run the Live Queries
		$.livequery.timeout = setTimeout($.livequery.checkQueue, 20);
	},
	
	stop: function(id) {
		if (id != undefined)
			// Stop are particular Live Query
			$.livequery.queries[ id ].stop();
		else
			// Stop all Live Queries
			$.each( $.livequery.queries, function(id) {
				$.livequery.queries[ id ].stop();
			});
	}
});

// Register core DOM manipulation methods
$.livequery.registerPlugin('append', 'prepend', 'after', 'before', 'wrap', 'attr', 'removeAttr', 'addClass', 'removeClass', 'toggleClass', 'empty', 'remove');

// Run Live Queries when the Document is ready
$(function() { $.livequery.play(); });


// Save a reference to the original init method
var init = $.prototype.init;

// Create a new init method that exposes two new properties: selector and context
$.prototype.init = function(a,c) {
	// Call the original init and save the result
	var r = init.apply(this, arguments);
	
	// Copy over properties if they exist already
	if (a && a.selector)
		r.context = a.context, r.selector = a.selector;
		
	// Set properties
	if ( typeof a == 'string' )
		r.context = c || document, r.selector = a;
	
	// Return the result
	return r;
};

// Give the init function the jQuery prototype for later instantiation (needed after Rev 4091)
$.prototype.init.prototype = $.prototype;
	
})(jQuery);
/*
 * jQuery Taconite plugin - A port of the Taconite framework by Ryan Asleson and
 *     Nathaniel T. Schutta: http://taconite.sourceforge.net/
 *
 * Examples and documentation at: http://malsup.com/jquery/taconite/
 * Copyright (c) 2007-2009 M. Alsup
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 * Thanks to Kenton Simpson for contributing many good ideas!
 *
 * $Id: jquery.taconite.js 2457 2007-07-23 02:43:46Z malsup $
 * @version: 3.05  24-JAN-2009
 * @requires jQuery v1.2.6 or later
 */

(function($) {

$.taconite = function(xml) { processDoc(xml); };

$.taconite.debug = 0;  // set to true to enable debug logging to Firebug
$.taconite.version = '3.05';
$.taconite.defaults = {
    cdataWrap: 'div'
};

// add 'replace' and 'replaceContent' plugins (conditionally)
if (typeof $.fn.replace == 'undefined')
    $.fn.replace = function(a) { return this.after(a).remove(); };
if (typeof $.fn.replaceContent == 'undefined')
    $.fn.replaceContent = function(a) { return this.empty().append(a); };

$.expr[':'].taconiteTag = function(a) { return a.taconiteTag === 1; };

$.taconite._httpData = $.httpData; // original jQuery httpData function

// replace jQuery's httpData method
$.httpData = $.taconite.detect = function(xhr, type) {
    var ct = xhr.getResponseHeader('content-type');
    if ($.taconite.debug) {
        log('[AJAX response] content-type: ', ct, ';  status: ', xhr.status, ' ', xhr.statusText, ';  has responseXML: ', xhr.responseXML != null);
        log('type: ' + type);
        log('responseXML: ' + xhr.responseXML);
    }
    var data = $.taconite._httpData(xhr, type); // call original method
    if (data && data.documentElement) {
        var root = data.documentElement.tagName;
        log('XML document root: ', root);
        if (root == 'taconite') {
            log('taconite command document detected');
            $.taconite(data);
        }
    }
    else { 
        log('jQuery core httpData returned: ' + data);
        log('httpData: response is not XML (or not "valid" XML)');
    }
    return data;
};

// allow auto-detection to be enabled/disabled on-demand
$.taconite.enableAutoDetection = function(b) {
    $.httpData = b ? $.taconite.detect : $.taconite._httpData;
};

var logCount = 0;
function log() {
    if (!$.taconite.debug || !window.console || !window.console.log) return;
    if (!logCount++)
        log('Plugin Version: ' + $.taconite.version);
    window.console.log('[taconite] ' + [].join.call(arguments,''));
};

function processDoc(xml) { 
    var status = true, ex;
    try {
        $.event.trigger('taconite-begin-notify', [xml])
        status = go(xml); 
    } catch(e) {
        status = ex = e;
    }
    $.event.trigger('taconite-complete-notify', [xml, !!status, status === true ? null : status]);
    if (ex) throw ex;
};

function go(xml) {
    var trimHash = { wrap: 1 };

    if (typeof xml == 'string')
        xml = convert(xml);
    if (!xml || !xml.documentElement) {
        log('$.taconite invoked without valid document; nothing to process');
        return false;
    }
    try {
        var t = new Date().getTime();
        // process the document
        process(xml.documentElement.childNodes);
        $.taconite.lastTime = (new Date().getTime()) - t;
        log('time to process response: ' + $.taconite.lastTime + 'ms');
    } catch(e) {
        if (window.console && window.console.error)
            window.console.error('[taconite] ERROR processing document: ' + e);
        throw e;
    }
    return true;
    
// convert string to xml document
    function convert(s) {
        var doc;
        log('attempting string to document conversion');
        try {
            if (window.DOMParser) {
                var parser = new DOMParser();
                doc = parser.parseFromString(s, 'text/xml');
            }
            else {
                doc = $("<xml>")[0];
                doc.async = 'false';
                doc.loadXML(s);
            }
        }
        catch(e) {
            if (window.console && window.console.error)
                window.console.error('[taconite] ERROR parsing XML string for conversion: ' + e);
            throw e;
        }
        var ok = doc && doc.documentElement && doc.documentElement.tagName != 'parsererror';
        log('conversion ', ok ? 'successful!' : 'FAILED');
        return doc;
    };

// process the taconite commands    
    function process(commands) {
        var doPostProcess = 0;
        for(var i=0; i < commands.length; i++) {
            if (commands[i].nodeType != 1)
                continue; // commands are elements
            var cmdNode = commands[i], cmd = cmdNode.tagName;
            if (cmd == 'eval') {
                var js = (cmdNode.firstChild ? cmdNode.firstChild.nodeValue : null);
                log('invoking "eval" command: ', js);
                if (js) $.globalEval(js);
                continue;
            }
            var q = cmdNode.getAttribute('select');
            var jq = $(q);
            if (!jq[0]) {
                log('No matching targets for selector: ', q);
                continue;
            }
            var cdataWrap = cmdNode.getAttribute('cdataWrap') || $.taconite.defaults.cdataWrap;

            var a = [];
            if (cmdNode.childNodes.length > 0) {
                doPostProcess = 1;
                for (var j=0,els=[]; j < cmdNode.childNodes.length; j++)
                    els[j] = createNode(cmdNode.childNodes[j]);
                a.push(trimHash[cmd] ? cleanse(els) : els);
            }

            // remain backward compat with pre 2.0.9 versions
            var n = cmdNode.getAttribute('name');
            var v = cmdNode.getAttribute('value');
            if (n !== null) a.push(n);
            if (v !== null) a.push(v);

            // @since: 2.0.9: support arg1, arg2, arg3...
            for (var j=1; true; j++) {
                v = cmdNode.getAttribute('arg'+j);
                if (v === null)
                    break;
                a.push(v);
            }

            if ($.taconite.debug) {
                var arg = els ? '...' : a.join(',');
                log("invoking command: $('", q, "').", cmd, '('+ arg +')');
            }
            jq[cmd].apply(jq,a);
        }
        // apply dynamic fixes
        if (doPostProcess) 
            postProcess();
    
        function postProcess() {
            if ($.browser.mozilla) return; 
            // post processing fixes go here; currently there is only one:
            // fix1: opera, IE6, Safari/Win don't maintain selected options in all cases (thanks to Karel Fucï¿½k for this!)
            $('select:taconiteTag').each(function() {
                var sel = this;
                $('option:taconiteTag', this).each(function() {
                    this.setAttribute('selected','selected');
                    this.taconiteTag = null;
                    if (sel.type == 'select-one') {
                        var idx = $('option',sel).index(this);
                        sel.selectedIndex = idx;
                    }
                });
                this.taconiteTag = null;
            });
        };
        
        function cleanse(els) {
            for (var i=0, a=[]; i < els.length; i++)
                if (els[i].nodeType == 1) a.push(els[i]);
            return a;
        };
        
        function createNode(node) {
            var type = node.nodeType;
            if (type == 1) return createElement(node);
            if (type == 3) return fixTextNode(node.nodeValue);
            if (type == 4) return handleCDATA(node.nodeValue);
            return null;
        };
        
        function handleCDATA(s) {
            var el = document.createElement(cdataWrap);
            el.innerHTML = s;
            
            // remove wrapper node if possible
            var $el = $(el), $ch = $el.children();
            if ($ch.size() == 1)
                return $ch[0];
            return el;
        };
        
        function fixTextNode(s) {
            if ($.browser.msie) s = s.replace(/\n/g, '\r').replace(/\s+/g, ' ');
            return document.createTextNode(s);
        };
        
        function createElement(node) {
            var e, tag = node.tagName.toLowerCase();
            // some elements in IE need to be created with attrs inline
            if ($.browser.msie) {
                var type = node.getAttribute('type');
                if (tag == 'table' || type == 'radio' || type == 'checkbox' || tag == 'button' || 
                    (tag == 'select' && node.getAttribute('multiple'))) {
                    e = document.createElement('<' + tag + ' ' + copyAttrs(null, node, true) + '>');
                }
            }
            if (!e) {
                e = document.createElement(tag);
                // copyAttrs(e, node, tag == 'option' && $.browser.safari);
                copyAttrs(e, node);
            }
            
            // IE fix; colspan must be explicitly set
            if ($.browser.msie && tag == 'td') {
                var colspan = node.getAttribute('colspan');
                if (colspan) e.colSpan = parseInt(colspan);
            }

            // IE fix; script tag not allowed to have children
            if($.browser.msie && !e.canHaveChildren) {
                if(node.childNodes.length > 0)
                    e.text = node.text;
            }
            else {
                for(var i=0, max=node.childNodes.length; i < max; i++) {
                    var child = createNode (node.childNodes[i]);
                    if(child) e.appendChild(child);
                }
            }
            if (! $.browser.mozilla) {
                if (tag == 'select' || (tag == 'option' && node.getAttribute('selected')))
                    e.taconiteTag = 1;
            }
            return e;
        };
        
        function copyAttrs(dest, src, inline) {
            for (var i=0, attr=''; i < src.attributes.length; i++) {
                var a = src.attributes[i], n = $.trim(a.name), v = $.trim(a.value);
                if (inline) attr += (n + '="' + v + '" ');
                else if (n == 'style') { // IE workaround
                    dest.style.cssText = v;
                    dest.setAttribute(n, v);
                }
                else $.attr(dest, n, v);
            }
            return attr;
        };
    };
};

})(jQuery);

/* Copyright (c) 2006 Brandon Aaron (http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * $LastChangedDate: 2007-07-21 23:45:56 +0000 (Sat, 21 Jul 2007) $
 * $Rev: 2447 $
 *
 * Version 2.1.1
 */
(function($){$.fn.bgIframe=$.fn.bgiframe=function(s){if($.browser.msie&&/6.0/.test(navigator.userAgent)){s=$.extend({top:'auto',left:'auto',width:'auto',height:'auto',opacity:true,src:'javascript:false;'},s||{});var prop=function(n){return n&&n.constructor==Number?n+'px':n;},html='<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+s.src+'"'+'style="display:block;position:absolute;z-index:-1;'+(s.opacity!==false?'filter:Alpha(Opacity=\'0\');':'')+'top:'+(s.top=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+\'px\')':prop(s.top))+';'+'left:'+(s.left=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+\'px\')':prop(s.left))+';'+'width:'+(s.width=='auto'?'expression(this.parentNode.offsetWidth+\'px\')':prop(s.width))+';'+'height:'+(s.height=='auto'?'expression(this.parentNode.offsetHeight+\'px\')':prop(s.height))+';'+'"/>';return this.each(function(){if($('> iframe.bgiframe',this).length==0)this.insertBefore(document.createElement(html),this.firstChild);});}return this;};})(jQuery);
/**
* hoverIntent is similar to jQuery's built-in "hover" function except that
* instead of firing the onMouseOver event immediately, hoverIntent checks
* to see if the user's mouse has slowed down (beneath the sensitivity
* threshold) before firing the onMouseOver event.
* 
* hoverIntent r5 // 2007.03.27 // jQuery 1.1.2
* <http://cherne.net/brian/resources/jquery.hoverIntent.html>
* 
* hoverIntent is currently available for use in all personal or commercial 
* projects under both MIT and GPL licenses. This means that you can choose 
* the license that best suits your project, and use it accordingly.
* 
* // basic usage (just like .hover) receives onMouseOver and onMouseOut functions
* $("ul li").hoverIntent( showNav , hideNav );
* 
* // advanced usage receives configuration object only
* $("ul li").hoverIntent({
*	sensitivity: 2, // number = sensitivity threshold (must be 1 or higher)
*	interval: 50,   // number = milliseconds of polling interval
*	over: showNav,  // function = onMouseOver callback (required)
*	timeout: 100,   // number = milliseconds delay before onMouseOut function call
*	out: hideNav    // function = onMouseOut callback (required)
* });
* 
* @param  f  onMouseOver function || An object with configuration options
* @param  g  onMouseOut function  || Nothing (use configuration options object)
* @return    The object (aka "this") that called hoverIntent, and the event object
* @author    Brian Cherne <brian@cherne.net>
*/
(function($) {
	$.fn.hoverIntent = function(f,g) {
		// default configuration options
		var cfg = {
			sensitivity: 7,
			interval: 100,
			timeout: 0
		};
		// override configuration options with user supplied object
		cfg = $.extend(cfg, g ? { over: f, out: g } : f );

		// instantiate variables
		// cX, cY = current X and Y position of mouse, updated by mousemove event
		// pX, pY = previous X and Y position of mouse, set by mouseover and polling interval
		var cX, cY, pX, pY;

		// A private function for getting mouse position
		var track = function(ev) {
			cX = ev.pageX;
			cY = ev.pageY;
		};

		// A private function for comparing current and previous mouse position
		var compare = function(ev,ob) {
			ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
			// compare mouse positions to see if they've crossed the threshold
			if ( ( Math.abs(pX-cX) + Math.abs(pY-cY) ) < cfg.sensitivity ) {
				$(ob).unbind("mousemove",track);
				// set hoverIntent state to true (so mouseOut can be called)
				ob.hoverIntent_s = 1;
				return cfg.over.apply(ob,[ev]);
			} else {
				// set previous coordinates for next time
				pX = cX; pY = cY;
				// use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs)
				ob.hoverIntent_t = setTimeout( function(){compare(ev, ob);} , cfg.interval );
			}
		};

		// A private function for delaying the mouseOut function
		var delay = function(ev,ob) {
			ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
			ob.hoverIntent_s = 0;
			return cfg.out.apply(ob,[ev]);
		};

		// A private function for handling mouse 'hovering'
		var handleHover = function(e) {
			// next three lines copied from jQuery.hover, ignore children onMouseOver/onMouseOut
			var p = (e.type == "mouseover" ? e.fromElement : e.toElement) || e.relatedTarget;
			while ( p && p != this ) { try { p = p.parentNode; } catch(e) { p = this; } }
			if ( p == this ) { return false; }

			// copy objects to be passed into t (required for event object to be passed in IE)
			var ev = jQuery.extend({},e);
			var ob = this;

			// cancel hoverIntent timer if it exists
			if (ob.hoverIntent_t) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); }

			// else e.type == "onmouseover"
			if (e.type == "mouseover") {
				// set "previous" X and Y position based on initial entry point
				pX = ev.pageX; pY = ev.pageY;
				// update "current" X and Y position based on mousemove
				$(ob).bind("mousemove",track);
				// start polling interval (self-calling timeout) to compare mouse coordinates over time
				if (ob.hoverIntent_s != 1) { ob.hoverIntent_t = setTimeout( function(){compare(ev,ob);} , cfg.interval );}

			// else e.type == "onmouseout"
			} else {
				// unbind expensive mousemove event
				$(ob).unbind("mousemove",track);
				// if hoverIntent state is true, then call the mouseOut function after the specified delay
				if (ob.hoverIntent_s == 1) { ob.hoverIntent_t = setTimeout( function(){delay(ev,ob);} , cfg.timeout );}
			}
		};

		// bind the function to the two event listeners
		return this.mouseover(handleHover).mouseout(handleHover);
	};
})(jQuery);
/*
 * Metadata - jQuery plugin for parsing metadata from elements
 *
 * Copyright (c) 2006 John Resig, Yehuda Katz, Jï¿½Ã¶rn Zaefferer, Paul McLanahan
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Revision: $Id: jquery.metadata.js 3620 2007-10-10 20:55:38Z pmclanahan $
 *
 */
(function($){$.extend({metadata:{defaults:{type:'class',name:'metadata',cre:/({.*})/,single:'metadata'},setType:function(type,name){this.defaults.type=type;this.defaults.name=name;},get:function(elem,opts){var settings=$.extend({},this.defaults,opts);if(!settings.single.length)settings.single='metadata';var data=$.data(elem,settings.single);if(data)return data;data="{}";if(settings.type=="class"){var m=settings.cre.exec(elem.className);if(m)data=m[1];}else if(settings.type=="elem"){if(!elem.getElementsByTagName)return;var e=elem.getElementsByTagName(settings.name);if(e.length)data=$.trim(e[0].innerHTML);}else if(elem.getAttribute!=undefined){var attr=elem.getAttribute(settings.name);if(attr)data=attr;}if(data.indexOf('{')<0)data="{"+data+"}";data=eval("("+data+")");$.data(elem,settings.single,data);return data;}}});$.fn.metadata=function(opts){return $.metadata.get(this[0],opts);};})(jQuery);
/*
 * jQuery clueTip plugin
 * Version 0.9.8  (05/22/2008)
 * @requires jQuery v1.1.4+
 * @requires Dimensions plugin (for jQuery versions < 1.2.5)
 *
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 */
;(function($) { 
/*
 * @name clueTip
 * @type jQuery
 * @cat Plugins/tooltip
 * @return jQuery
 * @author Karl Swedberg
 *
 * @credit Inspired by Cody Lindley's jTip (http://www.codylindley.com)
 * @credit Thanks to the following people for their many and varied contributions:
      Shelane Enos, Glen Lipka, Hector Santos, Torben Schreiter, Dan G. Switzer, JÃ¶rn Zaefferer 
 * @credit Thanks to Jonathan Chaffer, as always, for help with the hard parts. :-)
 */

 /**
 * 
 * Displays a highly customizable tooltip when the user hovers (default) or clicks (optional) the matched element. 
 * By default, the clueTip plugin loads a page indicated by the "rel" attribute via ajax and displays its contents.
 * If a "title" attribute is specified, its value is used as the clueTip's heading.
 * The attribute to be used for both the body and the heading of the clueTip is user-configurable. 
 * Optionally, the clueTip's body can display content from an element on the same page.
 * * Just indicate the element's id (e.g. "#some-id") in the rel attribute.
 * Optionally, the clueTip's body can display content from the title attribute, when a delimiter is indicated. 
 * * The string before the first instance of the delimiter is set as the clueTip's heading.
 * * All subsequent strings are wrapped in separate DIVs and placed in the clueTip's body.
 * The clueTip plugin allows for many, many more options. Pleasee see the examples and the option descriptions below...
 * 
 * 
 * @example $('#tip).cluetip();
 * @desc This is the most basic clueTip. It displays a 275px-wide clueTip on mouseover of the element with an ID of "tip." On mouseout of the element, the clueTip is hidden.
 *
 *
 * @example $('a.clue').cluetip({
 *  hoverClass: 'highlight',
 *  sticky: true,
 *  closePosition: 'bottom',
 *  closeText: '<img src="cross.png" alt="close" />',
 *  truncate: 60,
 *  ajaxSettings: {
 *    type: 'POST'
 *  }
 * });
 * @desc Displays a clueTip on mouseover of all <a> elements with class="clue". The hovered element gets a class of "highlight" added to it (so that it can be styled appropriately. This is esp. useful for non-anchor elements.). The clueTip is "sticky," which means that it will not be hidden until the user either clicks on its "close" text/graphic or displays another clueTip. The "close" text/graphic is set to diplay at the bottom of the clueTip (default is top) and display an image rather than the default "Close" text. Moreover, the body of the clueTip is truncated to the first 60 characters, which are followed by an ellipsis (...). Finally, the clueTip retrieves the content using POST rather than the $.ajax method's default "GET."
 * 
 * More examples can be found at http://plugins.learningjquery.com/cluetip/demo/
 * 
 * Full list of options/settings can be found at the bottom of this file and at http://plugins.learningjquery.com/cluetip/
 */

  var $cluetip, $cluetipInner, $cluetipOuter, $cluetipTitle, $cluetipArrows, $dropShadow, imgCount;
  $.fn.cluetip = function(js, options) {
    if (typeof js == 'object') {
      options = js;
      js = null;
    }
    return this.each(function(index) {
      var $this = $(this);      
      
      // support metadata plugin (v1.0 and 2.0)
      var opts = $.extend(false, {}, $.fn.cluetip.defaults, options || {}, $.metadata ? $this.metadata() : $.meta ? $this.data() : {});

      // start out with no contents (for ajax activation)
      var cluetipContents = false;
      var cluezIndex = parseInt(opts.cluezIndex, 10)-1;
      var isActive = false, closeOnDelay = 0;

      // create the cluetip divs
      if (!$('#cluetip').length) {
        /*$cluetipInner = $('<div id="cluetip-inner"></div>');
        $cluetipTitle = $('<h3 id="cluetip-title"></h3>');        
        $cluetipOuter = $('<div id="cluetip-outer"></div>').append($cluetipInner).prepend($cluetipTitle);
        $cluetip = $('<div id="cluetip"></div>').css({zIndex: opts.cluezIndex})
        .append($cluetipOuter).append('<div id="cluetip-extra"></div>')[insertionType](insertionElement).hide();
        $('<div id="cluetip-waitimage"></div>').css({position: 'absolute', zIndex: cluezIndex-1})
        .insertBefore('#cluetip').hide();
        $cluetip.css({position: 'absolute', zIndex: cluezIndex});
        $cluetipOuter.css({position: 'relative', zIndex: cluezIndex+1});
        $cluetipArrows = $('<div id="cluetip-arrows" class="cluetip-arrows"></div>').css({zIndex: cluezIndex+1}).appendTo('#cluetip');*/
		
		$cluetipInner = $('<div class="toolmid filepng"><div id="cluetip-inner"></div></div>');
        $cluetipTitle = $('<h3 id="cluetip-title"></h3>');   
		$cluetipbot = $('<div class="toolbot filepng"></div>');
        $cluetipOuter = $('<div id="cluetip-outer"><div class="tooltop filepng"></div></div>').append($cluetipInner).prepend($cluetipTitle).append($cluetipbot);
        $cluetip = $('<div></div>').attr({'id': 'cluetip'}).css({zIndex: opts.cluezIndex})
        .append($cluetipOuter).append('<div id="cluetip-extra"></div>')[insertionType](insertionElement).hide();
        $('<div id="cluetip-waitimage"></div>').css({position: 'absolute', zIndex: cluezIndex-1})
        .insertBefore('#cluetip').hide();
        $cluetip.css({position: 'absolute', zIndex: cluezIndex});
        $cluetipOuter.css({position: 'relative', zIndex: cluezIndex+1});
        $cluetipArrows = $('<div id="cluetip-arrows" class="cluetip-arrows"></div>').css({zIndex: cluezIndex+1}).appendTo('#cluetip');
      }
      var dropShadowSteps = (opts.dropShadow) ? +opts.dropShadowSteps : 0;
      if (!$dropShadow) {
        $dropShadow = $([]);
        for (var i=0; i < dropShadowSteps; i++) {
          $dropShadow = $dropShadow.add($('<div></div>').css({zIndex: cluezIndex-i-1, opacity:.1, top: 1+i, left: 1+i}));
        };
        $dropShadow.css({position: 'absolute', backgroundColor: '#000'})
        .prependTo($cluetip);
      }
      var tipAttribute = $this.attr(opts.attribute), ctClass = opts.cluetipClass;
      if (!tipAttribute && !opts.splitTitle && !js) return true;
      // if hideLocal is set to true, on DOM ready hide the local content that will be displayed in the clueTip      
      if (opts.local && opts.hideLocal) { $(tipAttribute + ':first').hide(); }
      var tOffset = parseInt(opts.topOffset, 10), lOffset = parseInt(opts.leftOffset, 10);
      // vertical measurement variables
      var tipHeight, wHeight;
      var defHeight = isNaN(parseInt(opts.height, 10)) ? 'auto' : (/\D/g).test(opts.height) ? opts.height : opts.height + 'px';
      var sTop, linkTop, posY, tipY, mouseY, baseline;
      // horizontal measurement variables
      var tipInnerWidth = isNaN(parseInt(opts.width, 10)) ? 275 : parseInt(opts.width, 10);
      var tipWidth = tipInnerWidth + (parseInt($cluetip.css('paddingLeft'))||0) + (parseInt($cluetip.css('paddingRight'))||0) + dropShadowSteps;
      var linkWidth = this.offsetWidth;
      var linkLeft, posX, tipX, mouseX, winWidth;
            
      // parse the title
      var tipParts;
      var tipTitle = (opts.attribute != 'title') ? $this.attr(opts.titleAttribute) : '';
      if (opts.splitTitle) {
        if(tipTitle == undefined) {tipTitle = '';}
        tipParts = tipTitle.split(opts.splitTitle);
        tipTitle = tipParts.shift();
      }
      var localContent;

/***************************************      
* ACTIVATION
****************************************/
    
//activate clueTip
    var activate = function(event) {
		linkWidth = $this[0].offsetWidth; //Addition for hidden link giving 0 width at initialization - Michael Lopez 22/08/2008 /Doberman
      if (!opts.onActivate($this)) {
        return false;
      }
      isActive = true;
      $cluetip.removeClass().css({width: tipInnerWidth});
      if (tipAttribute == $this.attr('href')) {
        $this.css('cursor', opts.cursor);
      }
      $this.attr('title','');
      if (opts.hoverClass) {
        $this.addClass(opts.hoverClass);
      }
      linkTop = posY = $this.offset().top;
      linkLeft = $this.offset().left;
      mouseX = event.pageX;
      mouseY = event.pageY;
      if ($this[0].tagName.toLowerCase() != 'area') {
        sTop = $(document).scrollTop();
        winWidth = $(window).width();
      }
// position clueTip horizontally
      if (opts.positionBy == 'fixed') {
        posX = linkWidth + linkLeft + lOffset;
        $cluetip.css({left: posX});
      } else {
        posX = (linkWidth > linkLeft && linkLeft > tipWidth)
          || linkLeft + linkWidth + tipWidth + lOffset > winWidth 
          ? linkLeft - tipWidth - lOffset 
          : linkWidth + linkLeft + lOffset;
        if ($this[0].tagName.toLowerCase() == 'area' || opts.positionBy == 'mouse' || linkWidth + tipWidth > winWidth) { // position by mouse
          if (mouseX + 20 + tipWidth > winWidth) {  
            $cluetip.addClass(' cluetip-' + ctClass);
            posX = (mouseX - tipWidth - lOffset) >= 0 ? mouseX - tipWidth - lOffset - parseInt($cluetip.css('marginLeft'),10) + parseInt($cluetipInner.css('marginRight'),10) :  mouseX - (tipWidth/2);
          } else {
            posX = mouseX + lOffset;
          }
        }
        var pY = posX < 0 ? event.pageY + tOffset : event.pageY;
        $cluetip.css({left: (posX > 0 && opts.positionBy != 'bottomTop') ? posX : (mouseX + (tipWidth/2) > winWidth) ? winWidth/2 - tipWidth/2 : Math.max(mouseX - (tipWidth/2),0)});
      }
        wHeight = $(window).height();

/***************************************
* load a string from cluetip method's first argument
***************************************/
      if (js) {
        $cluetipInner.html(js);
        cluetipShow(pY);
      }
/***************************************
* load the title attribute only (or user-selected attribute). 
* clueTip title is the string before the first delimiter
* subsequent delimiters place clueTip body text on separate lines
***************************************/

      else if (tipParts) {
        var tpl = tipParts.length;
        for (var i=0; i < tpl; i++){
          if (i == 0) {
            $cluetipInner.html(tipParts[i]);
          } else { 
            $cluetipInner.append('<div class="split-body">' + tipParts[i] + '</div>');
          }            
        };
        cluetipShow(pY);
      }
/***************************************
* load external file via ajax          
***************************************/

      else if (!opts.local && tipAttribute.indexOf('#') != 0) {
        if (cluetipContents && opts.ajaxCache) {
          $cluetipInner.html(cluetipContents);
          cluetipShow(pY);
        }
        else {
          var ajaxSettings = opts.ajaxSettings;
          ajaxSettings.url = tipAttribute;
          ajaxSettings.beforeSend = function() {
            $cluetipOuter.children().empty();
            if (opts.waitImage) {
              $('#cluetip-waitimage')
              .css({top: mouseY+20, left: mouseX+20})
              .show();
            }
          };
         ajaxSettings.error = function() {
            if (isActive) {
              $cluetipInner.html('<i>sorry, the contents could not be loaded</i>');
            }
          };
          ajaxSettings.success = function(data) {
            cluetipContents = opts.ajaxProcess(data);
            if (isActive) {
              $cluetipInner.html(cluetipContents);
            }
          };
          ajaxSettings.complete = function() {
          	imgCount = $('#cluetip-inner img').length;
        		if (imgCount && !$.browser.opera) {
        		  $('#cluetip-inner img').load(function() {
          			imgCount--;
          			if (imgCount<1) {
          				$('#cluetip-waitimage').hide();
          			  if (isActive) cluetipShow(pY);
          			}
        		  }); 
        		} else {
      				$('#cluetip-waitimage').hide();
        		  if (isActive) cluetipShow(pY);    
        		} 
          };
          $.ajax(ajaxSettings);
        }

/***************************************
* load an element from the same page
***************************************/
      } else if (opts.local){
        var $localContent = $(tipAttribute + ':first');
        var localCluetip = $.fn.wrapInner ? $localContent.wrapInner('<div></div>').children().clone(true) : $localContent.html();
        $.fn.wrapInner ? $cluetipInner.empty().append(localCluetip) : $cluetipInner.html(localCluetip);
        cluetipShow(pY);
      }
    };

// get dimensions and options for cluetip and prepare it to be shown
    var cluetipShow = function(bpY) {
      $cluetip.addClass('cluetip-' + ctClass);
      
      if (opts.truncate) { 
        var $truncloaded = $cluetipInner.text().slice(0,opts.truncate) + '...';
        $cluetipInner.html($truncloaded);
      }
      function doNothing() {}; //empty function
      tipTitle ? $cluetipTitle.show().html(tipTitle) : (opts.showTitle) ? $cluetipTitle.show().html('&nbsp;') : $cluetipTitle.hide();
      if (opts.sticky) {
        var $closeLink = $('<div id="cluetip-close"><a href="#">' + opts.closeText + '</a></div>');
        (opts.closePosition == 'bottom') ? $closeLink.appendTo($cluetipInner) : (opts.closePosition == 'title') ? $closeLink.prependTo($cluetipTitle) : $closeLink.prependTo($cluetipInner);
        $closeLink.click(function() {
          cluetipClose();
          return false;
        });
        if (opts.mouseOutClose) {
          if ($.fn.hoverIntent && opts.hoverIntent) { 
            $cluetip.hoverIntent({
              over: doNothing, 
              timeout: opts.hoverIntent.timeout,  
              out: function() { $closeLink.trigger('click'); }
            });
          } else {
            $cluetip.hover(doNothing, 
            function() {$closeLink.trigger('click'); });
          }
        } else {
          $cluetip.unbind('mouseout');
        }
      }
// now that content is loaded, finish the positioning 
      var direction = '';
      $cluetipOuter.css({overflow: defHeight == 'auto' ? 'visible' : 'auto', height: defHeight});
      tipHeight = defHeight == 'auto' ? Math.max($cluetip.outerHeight(),$cluetip.height()) : parseInt(defHeight,10);   
      tipY = posY;
      baseline = sTop + wHeight;
      if (opts.positionBy == 'fixed') {
        tipY = posY - opts.dropShadowSteps + tOffset;
      } else if ( (posX < mouseX && Math.max(posX, 0) + tipWidth > mouseX) || opts.positionBy == 'bottomTop') {
        if (posY + tipHeight + tOffset > baseline && mouseY - sTop > tipHeight + tOffset) { 
          tipY = mouseY - tipHeight - tOffset;
          direction = 'top';
        } else { 
          tipY = mouseY + tOffset;
          direction = 'bottom';
        }
      } else if ( posY + tipHeight + tOffset > baseline ) {
        tipY = (tipHeight >= wHeight) ? sTop : baseline - tipHeight - tOffset;
      } else if ($this.css('display') == 'block' || $this[0].tagName.toLowerCase() == 'area' || opts.positionBy == "mouse") {
        tipY = bpY - tOffset;
      } else {
        tipY = posY - opts.dropShadowSteps;
      }
      if (direction == '') {
        posX < linkLeft ? direction = 'left' : direction = 'right';
      }
      $cluetip.css({top: tipY + 'px'}).removeClass().addClass('clue-' + direction + '-' + ctClass).addClass(' cluetip-' + ctClass);
      if (opts.arrows) { // set up arrow positioning to align with element
        var bgY = (posY - tipY - opts.dropShadowSteps);
        $cluetipArrows.css({top: (/(left|right)/.test(direction) && posX >=0 && bgY > 0) ? bgY + 'px' : /(left|right)/.test(direction) ? 0 : ''}).show();
      } else {
        $cluetipArrows.hide();
      }

// (first hide, then) ***SHOW THE CLUETIP***
      $dropShadow.hide();
      $cluetip.hide()[opts.fx.open](opts.fx.open != 'show' && opts.fx.openSpeed);
      if (opts.dropShadow) $dropShadow.css({height: tipHeight, width: tipInnerWidth}).show();
      if ($.fn.bgiframe) { $cluetip.bgiframe(); }
      // trigger the optional onShow function
      if (opts.delayedClose > 0) {
        closeOnDelay = setTimeout(cluetipClose, opts.delayedClose);
      }
      opts.onShow($cluetip, $cluetipInner);
      
    };

/***************************************
   =INACTIVATION
-------------------------------------- */
    var inactivate = function() {
      isActive = false;
      $('#cluetip-waitimage').hide();
      if (!opts.sticky || (/click|toggle/).test(opts.activation) ) {
        cluetipClose();
clearTimeout(closeOnDelay);        
      };
      if (opts.hoverClass) {
        $this.removeClass(opts.hoverClass);
      }
      $('.cluetip-clicked').removeClass('cluetip-clicked');
    };
// close cluetip and reset some things
    var cluetipClose = function() {
      $cluetipOuter 
      .parent().hide().removeClass().end()
      .children().empty();
      if (tipTitle) {
        $this.attr(opts.titleAttribute, tipTitle);
      }
      $this.css('cursor','');
      if (opts.arrows) $cluetipArrows.css({top: ''});
    };

/***************************************
   =BIND EVENTS
-------------------------------------- */
  // activate by click
      if ( (/click|toggle/).test(opts.activation) ) {
        $this.click(function(event) {
          if ($cluetip.is(':hidden') || !$this.is('.cluetip-clicked')) {
            activate(event);
            $('.cluetip-clicked').removeClass('cluetip-clicked');
            $this.addClass('cluetip-clicked');

          } else {
            inactivate(event);

          }
          this.blur();
          return false;
        });
  // activate by focus; inactivate by blur    
      } else if (opts.activation == 'focus') {
        $this.focus(function(event) {
          activate(event);
        });
        $this.blur(function(event) {
          inactivate(event);
        });
  // activate by hover
    // clicking is returned false if cluetip url is same as href url
      } else {
        $this.click(function() {
          if ($this.attr('href') && $this.attr('href') == tipAttribute && !opts.clickThrough) {
            return false;
          }
        });
        //set up mouse tracking
        var mouseTracks = function(evt) {
          if (opts.tracking == true) {
            var trackX = posX - evt.pageX;
            var trackY = tipY ? tipY - evt.pageY : posY - evt.pageY;
            $this.mousemove(function(evt) {
              $cluetip.css({left: evt.pageX + trackX, top: evt.pageY + trackY });
            });
          }
        };
        if ($.fn.hoverIntent && opts.hoverIntent) {
          $this.mouseover(function() {$this.attr('title',''); })
          .hoverIntent({
            sensitivity: opts.hoverIntent.sensitivity,
            interval: opts.hoverIntent.interval,  
            over: function(event) {
              activate(event);
              mouseTracks(event);
            }, 
            timeout: opts.hoverIntent.timeout,  
            out: function(event) {inactivate(event); $this.unbind('mousemove');}
          });           
        } else {
          $this.hover(function(event) {
            activate(event);
            mouseTracks(event);
          }, function(event) {
            inactivate(event);
            $this.unbind('mousemove');
          });
        }
      }
    });
  };
  
/*
 * options for clueTip
 *
 * each one can be explicitly overridden by changing its value. 
 * for example: $.fn.cluetip.defaults.width = 200; 
 * would change the default width for all clueTips to 200. 
 *
 * each one can also be overridden by passing an options map to the cluetip method.
 * for example: $('a.example').cluetip({width: 200}); 
 * would change the default width to 200 for clueTips invoked by a link with class of "example"
 *
 */
  
  $.fn.cluetip.defaults = {  // set up default options
    width:            243,      // The width of the clueTip
    height:           'auto',   // The height of the clueTip
    cluezIndex:       9000,       // Sets the z-index style property of the clueTip
    positionBy:       'fixed',   // Sets the type of positioning: 'auto', 'mouse','bottomTop', 'fixed'
    topOffset:        25,       // Number of px to offset clueTip from top of invoking element
    leftOffset:       -224,       // Number of px to offset clueTip from left of invoking element
    local:            false,    // Whether to use content from the same page for the clueTip's body
    hideLocal:        true,     // If local option is set to true, this determines whether local content
                                // to be shown in clueTip should be hidden at its original location
    attribute:        'rel',    // the attribute to be used for fetching the clueTip's body content
    titleAttribute:   'title',  // the attribute to be used for fetching the clueTip's title
    splitTitle:       '',       // A character used to split the title attribute into the clueTip title and divs
                                // within the clueTip body. more info below [6]
    showTitle:        false,     // show title bar of the clueTip, even if title attribute not set
    cluetipClass:     'tooltip01',// class added to outermost clueTip div in the form of 'cluetip-' + clueTipClass.
    hoverClass:       '',       // class applied to the invoking element onmouseover and removed onmouseout
    waitImage:        true,     // whether to show a "loading" img, which is set in jquery.cluetip.css
    cursor:           'help',
    arrows:           false,    // if true, displays arrow on appropriate side of clueTip
    dropShadow:       false,     // set to false if you don't want the drop-shadow effect on the clueTip
    dropShadowSteps:  6,        // adjusts the size of the drop shadow
    sticky:           false,    // keep visible until manually closed
    mouseOutClose:    false,    // close when clueTip is moused out
    activation:       'hover',  // set to 'click' to force user to click to show clueTip
                                // set to 'focus' to show on focus of a form element and hide on blur
    clickThrough:     false,    // if true, and activation is not 'click', then clicking on link will take user to the link's href,
                                // even if href and tipAttribute are equal
    tracking:         false,    // if true, clueTip will track mouse movement (experimental)
    delayedClose:     0,        // close clueTip on a timed delay (experimental)
    closePosition:    'top',    // location of close text for sticky cluetips; can be 'top' or 'bottom' or 'title'
    closeText:        'Close',  // text (or HTML) to to be clicked to close sticky clueTips
    truncate:         0,        // number of characters to truncate clueTip's contents. if 0, no truncation occurs

    // effect and speed for opening clueTips
    fx: {             
                      open:       'show', // can be 'show' or 'slideDown' or 'fadeIn'
                      openSpeed:  ''
    },     

    // settings for when hoverIntent plugin is used             
    hoverIntent: {    
                      sensitivity:  3,
              			  interval:     50,
              			  timeout:      0
    },

    // function to run just before clueTip is shown.           
    onActivate:       function(e) {return true;},

    // function to run just after clueTip is shown.
    onShow:           function(ct, c){},
    
    // whether to cache results of ajax request to avoid unnecessary hits to server    
    ajaxCache:        true,  

    // process data retrieved via xhr before it's displayed
    ajaxProcess:      function(data) {
                        data = data.replace(/<s(cript|tyle)(.|\s)*?\/s(cript|tyle)>/g, '').replace(/<(link|title)(.|\s)*?\/(link|title)>/g,'');
                        return data;
    },                

    // can pass in standard $.ajax() parameters, not including error, complete, success, and url
    ajaxSettings: {   
                      dataType: 'html'
    },
    debug: false
  };


/*
 * Global defaults for clueTips. Apply to all calls to the clueTip plugin.
 *
 * @example $.cluetip.setup({
 *   insertionType: 'prependTo',
 *   insertionElement: '#container'
 * });
 * 
 * @property
 * @name $.cluetip.setup
 * @type Map
 * @cat Plugins/tooltip
 * @option String insertionType: Default is 'appendTo'. Determines the method to be used for inserting the clueTip into the DOM. Permitted values are 'appendTo', 'prependTo', 'insertBefore', and 'insertAfter'
 * @option String insertionElement: Default is 'body'. Determines which element in the DOM the plugin will reference when inserting the clueTip.
 *
 */
   
  var insertionType = 'appendTo', insertionElement = 'body';
  $.cluetip = {};
  $.cluetip.setup = function(options) {
    if (options && options.insertionType && (options.insertionType).match(/appendTo|prependTo|insertBefore|insertAfter/)) {
      insertionType = options.insertionType;
    }
    if (options && options.insertionElement) {
      insertionElement = options.insertionElement;
    }
  };
  
})(jQuery);

/*
 * Thickbox 3.1 - One Box To Rule Them All.
 * By Cody Lindley (http://www.codylindley.com)
 * Copyright (c) 2007 cody lindley
 * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
*/
		  
var tb_pathToImage = "/_ApoLayouts/img/icons/icon_background_loading.gif";

/*!!!!!!!!!!!!!!!!! edit below this line at your own risk !!!!!!!!!!!!!!!!!!!!!!!*/

//on page load call tb_init
$(document).ready(function(){   
	tb_init('a.thickbox');//pass where to apply thickbox
	imgLoader = new Image();// preload image
	imgLoader.src = tb_pathToImage;
});

//add thickbox to href & area elements that have a class of .thickbox
function tb_init(domChunk){
	$(domChunk).click(function(){
	var t = this.title || this.name || null;
	var a = this.href || this.alt;
	var g = this.rel || false;
	tb_show(t,a,g);
	this.blur();
	return false;
	});
}

function tb_show(caption, url, imageGroup) {//function called when the user clicks on a thickbox link

	try {
		if (typeof document.body.style.maxHeight === "undefined") {//if IE 6
			$("body","html").css({height: "100%", width: "100%"});
			$("html").css("overflow","hidden");
			if (document.getElementById("TB_HideSelect") === null) {//iframe to hide select elements in ie6
				$("body").append("<iframe id='TB_HideSelect'></iframe><div id='TB_overlay'></div><div id='TB_window'></div>");
				$("#TB_overlay").click(tb_remove);
			}
		}else{//all others
			if(document.getElementById("TB_overlay") === null){
				$("body").append("<div id='TB_overlay'></div><div id='TB_window'></div>");
				$("#TB_overlay").click(tb_remove);
			}
		}
		
		if(tb_detectMacXFF()){
			$("#TB_overlay").addClass("TB_overlayMacFFBGHack");//use png overlay so hide flash
		}else{
			$("#TB_overlay").addClass("TB_overlayBG");//use background and opacity
		}
		
		if(caption===null){caption="";}
		$("body").append("<div id='TB_load'><img src='"+imgLoader.src+"' /></div>");//add loader to the page
		$('#TB_load').show();//show loader
		
		var baseURL;
	   if(url.indexOf("?")!==-1){ //ff there is a query string involved
			baseURL = url.substr(0, url.indexOf("?"));
	   }else{ 
	   		baseURL = url;
	   }
	   
	   var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;
	   var urlType = baseURL.toLowerCase().match(urlString);

		if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp'){//code to show images
				
			TB_PrevCaption = "";
			TB_PrevURL = "";
			TB_PrevHTML = "";
			TB_NextCaption = "";
			TB_NextURL = "";
			TB_NextHTML = "";
			TB_imageCount = "";
			TB_FoundURL = false;
			if(imageGroup){
				TB_TempArray = $("a[@rel="+imageGroup+"]").get();
				for (TB_Counter = 0; ((TB_Counter < TB_TempArray.length) && (TB_NextHTML === "")); TB_Counter++) {
					var urlTypeTemp = TB_TempArray[TB_Counter].href.toLowerCase().match(urlString);
						if (!(TB_TempArray[TB_Counter].href == url)) {						
							if (TB_FoundURL) {
								TB_NextCaption = TB_TempArray[TB_Counter].title;
								TB_NextURL = TB_TempArray[TB_Counter].href;
								TB_NextHTML = "<span id='TB_next'>&nbsp;&nbsp;<a href='#'>Next &gt;</a></span>";
							} else {
								TB_PrevCaption = TB_TempArray[TB_Counter].title;
								TB_PrevURL = TB_TempArray[TB_Counter].href;
								TB_PrevHTML = "<span id='TB_prev'>&nbsp;&nbsp;<a href='#'>&lt; Prev</a></span>";
							}
						} else {
							TB_FoundURL = true;
							TB_imageCount = "Image " + (TB_Counter + 1) +" of "+ (TB_TempArray.length);											
						}
				}
			}

			imgPreloader = new Image();
			imgPreloader.onload = function(){		
			imgPreloader.onload = null;
				
			// Resizing large images - orginal by Christian Montoya edited by me.
			var pagesize = tb_getPageSize();
			var x = pagesize[0] - 150;
			var y = pagesize[1] - 150;
			var imageWidth = imgPreloader.width;
			var imageHeight = imgPreloader.height;
			if (imageWidth > x) {
				imageHeight = imageHeight * (x / imageWidth); 
				imageWidth = x; 
				if (imageHeight > y) { 
					imageWidth = imageWidth * (y / imageHeight); 
					imageHeight = y; 
				}
			} else if (imageHeight > y) { 
				imageWidth = imageWidth * (y / imageHeight); 
				imageHeight = y; 
				if (imageWidth > x) { 
					imageHeight = imageHeight * (x / imageWidth); 
					imageWidth = x;
				}
			}
			// End Resizing
			
			TB_WIDTH = imageWidth + 30;
			TB_HEIGHT = imageHeight + 60;
			$("#TB_window").append("<a href='' id='TB_ImageOff' title='Close'><img id='TB_Image' src='"+url+"' width='"+imageWidth+"' height='"+imageHeight+"' alt='"+caption+"'/></a>" + "<div id='TB_caption'>"+caption+"<div id='TB_secondLine'>" + TB_imageCount + TB_PrevHTML + TB_NextHTML + "</div></div><div id='TB_closeWindow'><a href='#' id='TB_closeWindowButton' title='Close'>close</a> or Esc Key</div>"); 		
			
			$("#TB_closeWindowButton").click(tb_remove);
			
			if (!(TB_PrevHTML === "")) {
				function goPrev(){
					if($(document).unbind("click",goPrev)){$(document).unbind("click",goPrev);}
					$("#TB_window").remove();
					$("body").append("<div id='TB_window'></div>");
					tb_show(TB_PrevCaption, TB_PrevURL, imageGroup);
					return false;	
				}
				$("#TB_prev").click(goPrev);
			}
			
			if (!(TB_NextHTML === "")) {		
				function goNext(){
					$("#TB_window").remove();
					$("body").append("<div id='TB_window'></div>");
					tb_show(TB_NextCaption, TB_NextURL, imageGroup);				
					return false;	
				}
				$("#TB_next").click(goNext);
				
			}

			document.onkeydown = function(e){ 	
				if (e == null) { // ie
					keycode = event.keyCode;
				} else { // mozilla
					keycode = e.which;
				}
				if(keycode == 27){ // close
					tb_remove();
				} else if(keycode == 190){ // display previous image
					if(!(TB_NextHTML == "")){
						document.onkeydown = "";
						goNext();
					}
				} else if(keycode == 188){ // display next image
					if(!(TB_PrevHTML == "")){
						document.onkeydown = "";
						goPrev();
					}
				}	
			};
			
			tb_position();
			$("#TB_load").remove();
			$("#TB_ImageOff").click(tb_remove);
			$("#TB_window").css({display:"block"}); //for safari using css instead of show
			};
			
			imgPreloader.src = url;
		}else{//code to show html
			
			var queryString = url.replace(/^[^\?]+\??/,'');
			var params = tb_parseQuery( queryString );

			TB_WIDTH = (params['width']*1) + 30 || 630; //defaults to 630 if no paramaters were added to URL
			TB_HEIGHT = (params['height']*1) + 40 || 440; //defaults to 440 if no paramaters were added to URL
			ajaxContentW = TB_WIDTH - 30;
			ajaxContentH = TB_HEIGHT - 45;
			
			if(url.indexOf('TB_iframe') != -1){// either iframe or ajax window		
					urlNoQuery = url.split('TB_');
					$("#TB_iframeContent").remove();
					if(params['modal'] != "true"){//iframe no modal
						$("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton' title='Close'>close</a> or Esc Key</div></div><iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;' > </iframe>");
					}else{//iframe modal
					$("#TB_overlay").unbind();
						$("#TB_window").append("<iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;'> </iframe>");
					}
			}else{// not an iframe, ajax
					if($("#TB_window").css("display") != "block"){
						if(params['modal'] != "true"){//ajax no modal
						// org $("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton'>close</a> or Esc Key</div></div><div id='TB_ajaxContent' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px'></div>");
						$("#TB_window").append("<div id='TB_ajaxContent' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px'></div>");
						}else{//ajax modal
						$("#TB_overlay").unbind();
						$("#TB_window").append("<div id='TB_ajaxContent' class='TB_modal' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px;'></div>");	
						}
					}else{//this means the window is already up, we are just loading new content via ajax
						$("#TB_ajaxContent")[0].style.width = ajaxContentW +"px";
						$("#TB_ajaxContent")[0].style.height = ajaxContentH +"px";
						$("#TB_ajaxContent")[0].scrollTop = 0;
						$("#TB_ajaxWindowTitle").html(caption);
					}
			}
					
			$("#TB_closeWindowButton").click(tb_remove);
			
				if(url.indexOf('TB_inline') != -1){	
					$("#TB_ajaxContent").append($('#' + params['inlineId']).children());
					$("#TB_window").unload(function () {
						$('#' + params['inlineId']).append( $("#TB_ajaxContent").children() ); // move elements back when you're finished
					});
					tb_position();
					$("#TB_load").remove();
					$("#TB_window").css({display:"block"}); 
				}else if(url.indexOf('TB_iframe') != -1){
					tb_position();
					if($.browser.safari){//safari needs help because it will not fire iframe onload
						$("#TB_load").remove();
						$("#TB_window").css({display:"block"});
					}
				}else{
					$("#TB_ajaxContent").load(url += "&random=" + (new Date().getTime()),function(){//to do a post change this load method
						tb_position();
						$("#TB_load").remove();
						tb_init("#TB_ajaxContent a.thickbox");
						$("#TB_window").css({display:"block"});
						$(document).trigger('thickbox.load'); //Added by Michael
					});
				}
			
		}

		if(!params['modal']){
			document.onkeyup = function(e){ 	
				if (e == null) { // ie
					keycode = event.keyCode;
				} else { // mozilla
					keycode = e.which;
				}
				if(keycode == 27){ // close
					tb_remove();
				}	
			};
		}
		
	} catch(e) {
		//nothing here
	}
}

//helper functions below
function tb_showIframe(){
	$("#TB_load").remove();
	$("#TB_window").css({display:"block"});
}

function tb_remove() {
 	$("#TB_imageOff").unbind("click");
	$("#TB_closeWindowButton").unbind("click");
	$("#TB_window").fadeOut("fast",function(){$('#TB_window,#TB_overlay,#TB_HideSelect').trigger("unload").unbind().remove();});
	$("#TB_load").remove();
	if (typeof document.body.style.maxHeight == "undefined") {//if IE 6
		$("body","html").css({height: "auto", width: "auto"});
		$("html").css("overflow","");
	}
	document.onkeydown = "";
	document.onkeyup = "";
	return false;
}

function tb_position() {
$("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'});
	if ( !(jQuery.browser.msie && jQuery.browser.version < 7)) { // take away IE6
		$("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'});
	}
}

function tb_parseQuery ( query ) {
   var Params = {};
   if ( ! query ) {return Params;}// return empty object
   var Pairs = query.split(/[;&]/);
   for ( var i = 0; i < Pairs.length; i++ ) {
      var KeyVal = Pairs[i].split('=');
      if ( ! KeyVal || KeyVal.length != 2 ) {continue;}
      var key = unescape( KeyVal[0] );
      var val = unescape( KeyVal[1] );
      val = val.replace(/\+/g, ' ');
      Params[key] = val;
   }
   return Params;
}

function tb_getPageSize(){
	var de = document.documentElement;
	var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
	var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
	arrayPageSize = [w,h];
	return arrayPageSize;
}

function tb_detectMacXFF() {
  var userAgent = navigator.userAgent.toLowerCase();
  if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1) {
    return true;
  }
}
/*=:project
    scalable Inman Flash Replacement (sIFR) version 3, revision 370

  =:file
    Copyright: 2006 Mark Wubben.
    Author: Mark Wubben, <http://novemberborn.net/>

  =:history
    * IFR: Shaun Inman
    * sIFR 1: Mike Davidson, Shaun Inman and Tomas Jogin
    * sIFR 2: Mike Davidson, Shaun Inman, Tomas Jogin and Mark Wubben

  =:license
    This software is licensed and provided under the CC-GNU LGPL.
    See <http://creativecommons.org/licenses/LGPL/2.1/>    
*/

var parseSelector=(function(){var _1=/\s*,\s*/;var _2=/\s*([\s>+~(),]|^|$)\s*/g;var _3=/([\s>+~,]|[^(]\+|^)([#.:@])/g;var _4=/^[^\s>+~]/;var _5=/[\s#.:>+~()@]|[^\s#.:>+~()@]+/g;function parseSelector(_6,_7){_7=_7||document.documentElement;var _8=_6.split(_1),_9=[];for(var i=0;i<_8.length;i++){var _b=[_7],_c=toStream(_8[i]);for(var j=0;j<_c.length;){var _e=_c[j++],_f=_c[j++],_10="";if(_c[j]=="("){while(_c[j++]!=")"&&j<_c.length){_10+=_c[j]}_10=_10.slice(0,-1)}_b=select(_b,_e,_f,_10)}_9=_9.concat(_b)}return _9}function toStream(_11){var _12=_11.replace(_2,"$1").replace(_3,"$1*$2");if(_4.test(_12)){_12=" "+_12}return _12.match(_5)||[]}function select(_13,_14,_15,_16){return (parseSelector.selectors[_14])?parseSelector.selectors[_14](_13,_15,_16):[]}var _17={toArray:function(_18){var a=[];for(var i=0;i<_18.length;i++){a.push(_18[i])}return a}};var dom={isTag:function(_1c,tag){return (tag=="*")||(tag.toLowerCase()==_1c.nodeName.toLowerCase())},previousSiblingElement:function(_1e){do{_1e=_1e.previousSibling}while(_1e&&_1e.nodeType!=1);return _1e},nextSiblingElement:function(_1f){do{_1f=_1f.nextSibling}while(_1f&&_1f.nodeType!=1);return _1f},hasClass:function(_20,_21){return (_21.className||"").match("(^|\\s)"+_20+"(\\s|$)")},getByTag:function(tag,_23){return _23.getElementsByTagName(tag)}};var _24={"#":function(_25,_26){for(var i=0;i<_25.length;i++){if(_25[i].getAttribute("id")==_26){return [_25[i]]}}return []}," ":function(_28,_29){var _2a=[];for(var i=0;i<_28.length;i++){_2a=_2a.concat(_17.toArray(dom.getByTag(_29,_28[i])))}return _2a},">":function(_2c,_2d){var _2e=[];for(var i=0,_30;i<_2c.length;i++){_30=_2c[i];for(var j=0,_32;j<_30.childNodes.length;j++){_32=_30.childNodes[j];if(_32.nodeType==1&&dom.isTag(_32,_2d)){_2e.push(_32)}}}return _2e},".":function(_33,_34){var _35=[];for(var i=0,_37;i<_33.length;i++){_37=_33[i];if(dom.hasClass([_34],_37)){_35.push(_37)}}return _35},":":function(_38,_39,_3a){return (parseSelector.pseudoClasses[_39])?parseSelector.pseudoClasses[_39](_38,_3a):[]}};parseSelector.selectors=_24;parseSelector.pseudoClasses={};parseSelector.util=_17;parseSelector.dom=dom;return parseSelector})();
var sIFR=new function(){var _3b=this;var _3c="sIFR-active";var _3d="sIFR-unloading";var _3e="sIFR-replaced";var _3f="sIFR-flash";var _40="sIFR-ignore";var _41="sIFR-alternate";var _42="sIFR-class";var _43="sIFR-layout";var _44="sIFR-fixfocus";var _45="sIFR-dummy";var _46="sIFR-zoomdetect";var _47=6;var _48=126;var _49=8;var _4a="SIFR-PREFETCHED";var _4b=[];var _4c=5;var _4d="370";this.isActive=false;this.isEnabled=true;this.preserveSingleWhitespace=false;this.fixWrap=true;this.fixHover=true;this.autoInitialize=true;this.setPrefetchCookie=true;this.cookiePath="/";this.domains=[];this.fromLocal=false;this.forceClear=false;this.forceWidth=true;this.fitExactly=false;this.forceTextTransform=true;this.useDomLoaded=true;this.useStyleCheck=false;this.hasFlashClassSet=false;this.repaintOnResize=true;this.callbacks=[];var _4e=0;var _4f=false,_50=false;var dom=new function(){var _52="http://www.w3.org/1999/xhtml";this.getBody=function(){var _53=document.getElementsByTagName("body");if(_53.length==1){return _53[0]}return null};this.addClass=function(_54,_55){if(_55){_55.className=((_55.className||"")==""?"":_55.className+" ")+_54}};this.removeClass=function(_56,_57){if(_57){_57.className=_57.className.replace(new RegExp("(^|\\s)"+_56+"(\\s|$)"),"").replace(/^\s+|(\s)\s+/g,"$1")}};this.hasClass=function(_58,_59){return new RegExp("(^|\\s)"+_58+"(\\s|$)").test(_59.className)};this.hasOneOfClassses=function(_5a,_5b){for(var i=0;i<_5a.length;i++){if(this.hasClass(_5a[i],_5b)){return true}}return false};this.create=function(_5d){if(document.createElementNS){return document.createElementNS(_52,_5d)}return document.createElement(_5d)};this.nodeFromHtml=function(_5e){var _5f=this.create("div");_5f.innerHTML=_5e;return _5f.firstChild};this.getComputedStyle=function(_60,_61){var _62;if(document.defaultView&&document.defaultView.getComputedStyle){var _63=document.defaultView.getComputedStyle(_60,null);_62=_63?_63[_61]:null}else{if(_60.currentStyle){_62=_60.currentStyle[_61]}}return _62||""};this.getStyleAsInt=function(_64,_65,_66){var _67=this.getComputedStyle(_64,_65);if(_66&&!/px$/.test(_67)){return 0}_67=parseInt(_67);return isNaN(_67)?0:_67};this.getWidthFromStyle=function(_68){var _69=this.getStyleAsInt(_68,"width",ua.ie);if(_69==0){var _6a=this.getStyleAsInt(_68,"paddingRight",true);var _6b=this.getStyleAsInt(_68,"paddingLeft",true);var _6c=this.getStyleAsInt(_68,"borderRightWidth",true);var _6d=this.getStyleAsInt(_68,"borderLeftWidth",true);_69=_68.offsetWidth-_6b-_6a-_6d-_6c}return _69};this.getHeightFromStyle=function(_6e){var _6f=this.getStyleAsInt(_6e,"height",ua.ie);if(_6f==0){var _70=this.getStyleAsInt(_6e,"paddingTop",true);var _71=this.getStyleAsInt(_6e,"paddingBottom",true);var _72=this.getStyleAsInt(_6e,"borderTopHeight",true);var _73=this.getStyleAsInt(_6e,"borderBottomHeight",true);_6f=_6e.offsetHeight-_71-_70-_73-_72}return _6f};this.blurElement=function(_74){if(ua.gecko){_74.blur();return}var _75=dom.create("input");_75.style.width="0px";_75.style.height="0px";_74.parentNode.appendChild(_75);_75.focus();_75.blur();_75.parentNode.removeChild(_75)};this.getDimensions=function(_76){var _77=_76.offsetWidth;var _78=_76.offsetHeight;if(_77==0||_78==0){for(var i=0;i<_76.childNodes.length;i++){var _7a=_76.childNodes[i];if(_7a.nodeType!=1){continue}_77=Math.max(_77,_7a.offsetWidth);_78=Math.max(_78,_7a.offsetHeight)}}return {width:_77,height:_78}};this.contentIsLink=function(_7b){var _7c=false;for(var i=0;i<_7b.childNodes.length;i++){var _7e=_7b.childNodes[i];if(_7e.nodeType==3&&!_7e.nodeValue.match(/^\s*$/)){return false}else{if(_7e.nodeType!=1){continue}}var _7f=_7e.nodeName.toLowerCase()=="a";if(!_7f){return false}else{_7c=true}}return _7c};var dom=this;this.swf={create:function(_81,_82,id,_84,_85,src,_87,_88,_89){var obj=_81.object(_82,id,src,_84,_85);return _81.params(obj,"flashvars",_87,"wmode",_88,"bgcolor",_89,"allowScriptAccess","always","quality","best")},ie:{object:function(_8b,id,src,_8e,_8f){return "<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" id=\""+id+"\" width=\""+_8e+"\" height=\""+_8f+"\" class=\""+_3f+"\">"+"<param name=\"movie\" value=\""+src+"\"></param></object>"+"<scr"+"ipt event=FSCommand(info,args) for="+id+">"+id+"_DoFSCommand(info, args);"+"</"+"script>"},params:function(obj){var _91="";for(var i=1;i<arguments.length;i+=2){_91+="<param name=\""+arguments[i]+"\" value=\""+arguments[i+1]+"\"></param>"}return obj.replace(/(<\/object>)/,_91+"$1")},insert:function(_93,_94){_93.innerHTML=_94;return _94}},other:{object:function(_95,id,src,_98,_99){var obj=dom.create("object");var _9b=["type","application/x-shockwave-flash","id",id,"name",id,"data",src,"width",_98,"height",_99];while(_9b.length){obj.setAttribute(_9b.shift(),_9b.shift())}obj.className=_3f;if(!_95){return {root:obj,obj:obj}}var _9c=dom.create("div");_9c.className=_44;_9c.appendChild(obj);return {root:_9c,obj:obj}},params:function(obj){for(var i=1;i<arguments.length;i+=2){if(arguments[i]=="name"){continue}var _9f=dom.create("param");_9f.setAttribute("name",arguments[i]);_9f.setAttribute("value",arguments[i+1]);obj.obj.appendChild(_9f)}return obj.root},insert:function(_a0,_a1){while(_a0.firstChild){_a0.removeChild(_a0.firstChild)}_a0.appendChild(_a1);return _a1.cloneNode(true)}}}};this.dom=dom;var ua=new function(){var ua=navigator.userAgent.toLowerCase();var _a4=(navigator.product||"").toLowerCase();this.macintosh=ua.indexOf("mac")>-1;this.windows=ua.indexOf("windows")>-1;this.quicktime=false;this.opera=ua.indexOf("opera")>-1;this.konqueror=_a4.indexOf("konqueror")>-1;this.ie=false/*@cc_on||true@*/;this.ieSupported=this.ie&&!/ppc|smartphone|iemobile|msie\s5\.5/.test(ua)/*@cc_on&&@_jscript_version>=5.5@*/;this.ieWin=this.ie&&this.windows/*@cc_on&&@_jscript_version>=5.1@*/;this.windows=this.windows&&(!this.ie||this.ieWin);this.ieMac=this.ie&&this.macintosh/*@cc_on&&@_jscript_version<5.1@*/;this.macintosh=this.macintosh&&(!this.ie||this.ieMac);this.safari=ua.indexOf("safari")>-1;this.webkit=ua.indexOf("applewebkit")>-1&&!this.konqueror;this.khtml=this.webkit||this.konqueror;this.gecko=!this.webkit&&_a4=="gecko";this.ieVersion=this.ie&&/.*msie\s(\d\.\d)/.exec(ua)?parseFloat(RegExp.$1):0;this.operaVersion=this.opera&&/.*opera(\s|\/)(\d+\.\d+)/.exec(ua)?parseFloat(RegExp.$2):0;this.webkitVersion=this.webkit&&/.*applewebkit\/(\d+).*/.exec(ua)?parseFloat(RegExp.$1):0;this.geckoBuildDate=this.gecko&&/.*gecko\/(\d{8}).*/.exec(ua)?parseFloat(RegExp.$1):0;this.konquerorMajor=this.konqueror&&/.*konqueror\/(\d).*/.exec(ua)?parseFloat(RegExp.$1):0;this.konquerorMinor=this.konqueror&&/.*khtml\/\d\.(\d).*/.exec(ua)?parseFloat(RegExp.$1):0;this.konquerorSmall=this.konqueror&&/.*khtml\/\d\.\d\.(\d).*/.exec(ua)?parseFloat(RegExp.$1):0;this.flashVersion=0;if(this.ieWin){var axo;var _a6=false;try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7")}catch(e){try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");this.flashVersion=6;axo.AllowScriptAccess="always"}catch(e){_a6=this.flashVersion==6}if(!_a6){try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash")}catch(e){}}}if(!_a6&&axo){this.flashVersion=parseFloat(/([\d,?]+)/.exec(axo.GetVariable("$version"))[1].replace(/,/g,"."))}}else{if(navigator.plugins&&navigator.plugins["Shockwave Flash"]){var _a7=navigator.plugins["Shockwave Flash"];this.flashVersion=parseFloat(/(\d+\.?\d*)/.exec(_a7.description)[1]);var i=0;while(this.flashVersion>=_49&&i<navigator.mimeTypes.length){var _a9=navigator.mimeTypes[i];if(_a9.type=="application/x-shockwave-flash"&&_a9.enabledPlugin.description.toLowerCase().indexOf("quicktime")>-1){this.flashVersion=0;this.quicktime=true}i++}}}this.flash=this.flashVersion>=_49;this.transparencySupport=this.macintosh||this.windows;this.computedStyleSupport=this.ie||document.defaultView&&document.defaultView.getComputedStyle&&(!this.gecko||this.geckoBuildDate>=20030624);this.requiresPrefetch=this.ieWin||this.khtml;this.fixFocus=this.gecko&&this.windows&&this.geckoBuildDate>20061206;this.nativeDomLoaded=this.gecko||this.webkit&&this.webkitVersion>=525||this.konqueror&&this.konquerorMajor>3||this.opera;this.mustCheckStyle=this.khtml||this.opera;this.forcePageLoad=this.webkit&&this.webkit<523;this.properDocument=typeof (document.location)=="object";this.supported=this.flash&&this.properDocument&&(!this.ie||this.ieSupported)&&(!this.opera)&&(!this.webkit||this.webkitVersion>=412)&&(!this.konqueror)&&this.computedStyleSupport&&(!this.gecko||this.geckoBuildDate>20040804)};this.ua=ua;var _aa=new function(){var _ab={leading:true,"margin-left":true,"margin-right":true,"text-indent":true};var _ac=" ";function capitalize($){return $.toUpperCase()}this.normalize=function(str){if(_3b.preserveSingleWhitespace){return str.replace(/\s/g,_ac)}return str.replace(/(\n|\r)+/g,_ac).replace(/(\s)\s+/g,"$1").replace(/\xA0/,_ac)};this.textTransform=function(_af,str){switch(_af){case "uppercase":str=str.toUpperCase();break;case "lowercase":str=str.toLowerCase();break;case "capitalize":var _b1=str;str=str.replace(/^\w|\s\w/g,capitalize);if(str.indexOf("function capitalize")!=-1){var _b2=_b1.replace(/(^|\s)(\w)/g,"$1$1$2$2").split(/^\w|\s\w/g);str="";for(var i=0;i<_b2.length;i++){str+=_b2[i].charAt(0).toUpperCase()+_b2[i].substring(1)}}break}return str};this.toHexString=function(str){if(typeof (str)!="string"||!str.charAt(0)=="#"||str.length!=4&&str.length!=7){return str}str=str.replace(/#/,"");if(str.length==3){str=str.replace(/(.)(.)(.)/,"$1$1$2$2$3$3")}return "0x"+str};this.toJson=function(obj){var _b6="";switch(typeof (obj)){case "string":_b6="\""+obj+"\"";break;case "number":case "boolean":_b6=obj.toString();break;case "object":_b6=[];for(var _b7 in obj){if(obj[_b7]==Object.prototype[_b7]){continue}_b6.push("\""+_b7+"\":"+_aa.toJson(obj[_b7]))}_b6="{"+_b6.join(",")+"}";break}return _b6};this.convertCssArg=function(arg){if(!arg){return {}}if(typeof (arg)=="object"){if(arg.constructor==Array){arg=arg.join("")}else{return arg}}var obj={};var _ba=arg.split("}");for(var i=0;i<_ba.length;i++){var $=_ba[i].match(/([^\s{]+)\s*\{(.+)\s*;?\s*/);if(!$||$.length!=3){continue}if(!obj[$[1]]){obj[$[1]]={}}var _bd=$[2].split(";");for(var j=0;j<_bd.length;j++){var $2=_bd[j].match(/\s*([^:\s]+)\s*\:\s*([^;]+)/);if(!$2||$2.length!=3){continue}obj[$[1]][$2[1]]=$2[2].replace(/\s+$/,"")}}return obj};this.extractFromCss=function(css,_c1,_c2,_c3){var _c4=null;if(css&&css[_c1]&&css[_c1][_c2]){_c4=css[_c1][_c2];if(_c3){delete css[_c1][_c2]}}return _c4};this.cssToString=function(arg){var css=[];for(var _c7 in arg){var _c8=arg[_c7];if(_c8==Object.prototype[_c7]){continue}css.push(_c7,"{");for(var _c9 in _c8){if(_c8[_c9]==Object.prototype[_c9]){continue}var _ca=_c8[_c9];if(_ab[_c9]){_ca=parseInt(_ca,10)}css.push(_c9,":",_ca,";")}css.push("}")}return css.join("")};this.escape=function(str){return escape(str).replace(/\+/g,"%2B")};this.copyProperties=function(_cc,to){for(var _ce in _cc){if(to[_ce]===undefined){to[_ce]=_cc[_ce]}}return to};this.domain=function(){var _cf="";try{_cf=document.domain}catch(e){}return _cf};this.domainMatches=function(_d0,_d1){if(_d1=="*"||_d1==_d0){return true}var _d2=_d1.lastIndexOf("*");if(_d2>-1){_d1=_d1.substr(_d2+1);var _d3=_d0.lastIndexOf(_d1);if(_d3>-1&&(_d3+_d1.length)==_d0.length){return true}}return false};this.uriEncode=function(s){return encodeURI(decodeURIComponent(s))}};this.util=_aa;var _d5={};_d5.fragmentIdentifier=new function(){this.fix=true;var _d6;this.cache=function(){_d6=document.title};function doFix(){document.title=_d6}this.restore=function(){if(this.fix){setTimeout(doFix,0)}}};this.hacks=_d5;_d5.pageLoad=new function(){var _d7=null;function pollLoad(){try{if(ua.ie||document.readyState!="loaded"&&document.readyState!="complete"){document.documentElement.doScroll("left")}}catch(e){return setTimeout(pollLoad,10)}afterDomLoad()}function afterDomLoad(){if(_3b.useStyleCheck){checkStyle()}else{if(!ua.mustCheckStyle){fire(null,true)}}}function checkStyle(){_d7=dom.create("div");_d7.className=_45;dom.getBody().appendChild(_d7);pollStyle()}function pollStyle(){if(dom.getComputedStyle(_d7,"marginLeft")=="42px"){afterStyle()}else{setTimeout(pollStyle,10)}}function afterStyle(){if(_d7&&_d7.parentNode){_d7.parentNode.removeChild(_d7)}_d7=null;fire(null,true)}function fire(evt,_d9){_3b.initialize(_d9);if(evt&&evt.type=="load"){if(document.removeEventListener){document.removeEventListener("DOMContentLoaded",fire,false)}if(window.removeEventListener){window.removeEventListener("load",fire,false)}}}this.attach=function(){if(window.addEventListener){window.addEventListener("load",fire,false)}else{window.attachEvent("onload",fire)}if(!_3b.useDomLoaded||ua.forcePageLoad||ua.ie&&window.top!=window){return}if(ua.nativeDomLoaded){document.addEventListener("DOMContentLoaded",afterDomLoad,false)}else{if(ua.ie||ua.khtml){pollLoad()}}}};this.errors={};var _da={kwargs:[],replaceAll:function(_db){for(var i=0;i<this.kwargs.length;i++){_3b.replace(this.kwargs[i])}if(!_db){this.kwargs=[]}}};function isValidDomain(){if(_3b.domains.length==0){return true}var _dd=_aa.domain();for(var i=0;i<_3b.domains.length;i++){var _df=_3b.domains[i];if(_aa.domainMatches(_dd,_df)){return true}}return false}function isFile(){if(!_3b.fromLocal&&document.location.protocol=="file:"){if(_3b.debug){_3b.errors.fire("isFile")}return true}return false}function resize(evt){var _e1=resize.viewport;resize.viewport={width:window.innerWidth||document.documentElement.clientWidth||dom.getBody().clientWidth,height:window.innerHeight||document.documentElement.clientHeight||dom.getBody().clientHeight};if(_e1&&resize.viewport.width==_e1.width&&resize.viewport.height==_e1.height){return}if(resize.timer){clearTimeout(resize.timer)}resize.timer=setTimeout(function(){delete resize.timer;for(var i=0;i<_3b.callbacks.length;i++){_3b.callbacks[i].resize()}},200)}this.activate=function(){if(!ua.supported||!this.isEnabled||this.isActive||!isValidDomain()||isFile()){return}if(arguments.length>0){this.prefetch.apply(this,arguments)}this.isActive=true;this.setFlashClass();_d5.fragmentIdentifier.fix=ua.ieWin&&_d5.fragmentIdentifier.fix&&window.location.hash!="";if(_d5.fragmentIdentifier.fix){_d5.fragmentIdentifier.cache()}if(!this.autoInitialize){return}_d5.pageLoad.attach();if(ua.ie){window.attachEvent("onunload",function(){dom.addClass(_3d,document.documentElement)})}};this.setFlashClass=function(){if(this.hasFlashClassSet){return}dom.addClass(_3c,dom.getBody()||document.documentElement);this.hasFlashClassSet=true};this.removeFlashClass=function(){if(!this.hasFlashClassSet){return}dom.removeClass(_3c,dom.getBody());dom.removeClass(_3c,document.documentElement);this.hasFlashClassSet=false};this.initialize=function(_e3){if(!this.isActive||!this.isEnabled){return}if(_50){if(!_e3){_da.replaceAll(false)}return}_50=true;_da.replaceAll(_e3);if(_3b.repaintOnResize){if(window.addEventListener){window.addEventListener("resize",resize,false)}else{window.attachEvent("onresize",resize)}}clearPrefetch()};function getSource(src){if(typeof (src)!="string"){if(src.src){src=src.src}if(typeof (src)!="string"){var _e5=[];for(var _e6 in src){if(src[_e6]!=Object.prototype[_e6]){_e5.push(_e6)}}_e5.sort().reverse();var _e7="";var i=-1;while(!_e7&&++i<_e5.length){if(parseFloat(_e5[i])<=ua.flashVersion){_e7=src[_e5[i]]}}src=_e7}}if(!src&&_3b.debug){_3b.errors.fire("getSource")}if(ua.ie&&src.charAt(0)=="/"){src=window.location.toString().replace(/([^:]+)(:\/?\/?)([^\/]+).*/,"$1$2$3")+src}return src}this.prefetch=function(){if((!ua.requiresPrefetch&&!this.isActive)||!ua.supported||!this.isEnabled||!isValidDomain()){return}if(this.setPrefetchCookie&&new RegExp(";?"+_4a+"=true;?").test(document.cookie)){return}try{_4f=true;if(ua.ieWin){prefetchIexplore(arguments)}else{prefetchLight(arguments)}if(this.setPrefetchCookie){document.cookie=_4a+"=true;path="+this.cookiePath}}catch(e){if(_3b.debug){throw e}}};function prefetchIexplore(_e9){for(var i=0;i<_e9.length;i++){document.write("<script defer type=\"sifr/prefetch\" src=\""+getSource(_e9[i])+"\"></script>")}}function prefetchLight(_eb){for(var i=0;i<_eb.length;i++){new Image().src=getSource(_eb[i])}}function clearPrefetch(){if(!ua.ieWin||!_4f){return}try{var _ed=document.getElementsByTagName("script");for(var i=_ed.length-1;i>=0;i--){var _ef=_ed[i];if(_ef.type=="sifr/prefetch"){_ef.parentNode.removeChild(_ef)}}}catch(e){}}function getRatio(_f0,_f1){for(var i=0;i<_f1.length;i+=2){if(_f0<=_f1[i]){return _f1[i+1]}}return _f1[_f1.length-1]||1}function getFilters(obj){var _f4=[];for(var _f5 in obj){if(obj[_f5]==Object.prototype[_f5]){continue}var _f6=obj[_f5];_f5=[_f5.replace(/filter/i,"")+"Filter"];for(var _f7 in _f6){if(_f6[_f7]==Object.prototype[_f7]){continue}_f5.push(_f7+":"+_aa.escape(_aa.toJson(_aa.toHexString(_f6[_f7]))))}_f4.push(_f5.join(","))}return _aa.escape(_f4.join(";"))}function calculate(_f8){var _f9,_fa;if(!ua.ie){_f9=dom.getStyleAsInt(_f8,"lineHeight");_fa=Math.floor(dom.getStyleAsInt(_f8,"height")/_f9)}else{if(ua.ie){var _fb=dom.getComputedStyle(_f8,"fontSize");if(_fb.indexOf("px")>0){_f9=parseInt(_fb)}else{var _fc=_f8.innerHTML;_f8.style.visibility="visible";_f8.style.overflow="visible";_f8.style.position="static";_f8.style.zoom="normal";_f8.style.writingMode="lr-tb";_f8.style.width=_f8.style.height="auto";_f8.style.maxWidth=_f8.style.maxHeight=_f8.style.styleFloat="none";var _fd=_f8;var _fe=_f8.currentStyle.hasLayout;if(_fe){_f8.innerHTML="<div class=\""+_43+"\">X<br />X<br />X</div>";_fd=_f8.firstChild}else{_f8.innerHTML="X<br />X<br />X"}var _ff=_fd.getClientRects();_f9=_ff[1].bottom-_ff[1].top;_f9=Math.ceil(_f9*0.8);if(_fe){_f8.innerHTML="<div class=\""+_43+"\">"+_fc+"</div>";_fd=_f8.firstChild}else{_f8.innerHTML=_fc}_ff=_fd.getClientRects();_fa=_ff.length;if(_fe){_f8.innerHTML=_fc}_f8.style.visibility=_f8.style.width=_f8.style.height=_f8.style.maxWidth=_f8.style.maxHeight=_f8.style.overflow=_f8.style.styleFloat=_f8.style.position=_f8.style.zoom=_f8.style.writingMode=""}}}return {lineHeight:_f9,lines:_fa}}this.replace=function(_100,_101){if(!ua.supported){return}if(_101){_100=_aa.copyProperties(_100,_101)}if(!_50){return _da.kwargs.push(_100)}if(_3b.onReplacementStart){_3b.onReplacementStart(_100)}var _102=_100.elements;if(!_102&&parseSelector){_102=parseSelector(_100.selector)}if(_102.length==0){return}var src=getSource(_100.src);var css=_aa.convertCssArg(_100.css);var _105=getFilters(_100.filters);var _106=(_100.forceClear==null)?_3b.forceClear:_100.forceClear;var _107=_100.forceSingleLine===true;var _108=_107||((_100.fitExactly==null)?_3b.fitExactly:_100.fitExactly);var _109=_108||(_100.forceWidth==null?_3b.forceWidth:_100.forceWidth);var _10a=!!(_100.preventWrap&&!_107);var _10b=parseInt(_aa.extractFromCss(css,".sIFR-root","leading"))||0;var _10c=_aa.extractFromCss(css,".sIFR-root","font-size",true)||0;var _10d=_aa.extractFromCss(css,".sIFR-root","background-color",true)||"#FFFFFF";var _10e=_aa.extractFromCss(css,".sIFR-root","kerning",true)||"";var _10f=_100.gridFitType||_aa.extractFromCss(css,".sIFR-root","text-align")=="right"?"subpixel":"pixel";var _110=_3b.forceTextTransform?_aa.extractFromCss(css,".sIFR-root","text-transform",true)||"none":"none";var _111=_aa.extractFromCss(css,".sIFR-root","opacity",true)||"100";var _112=_aa.extractFromCss(css,".sIFR-root","cursor",true)||"default";var _113=_100.pixelFont||false;var _114=_100.ratios||_4b;var _115=parseInt(_100.tuneHeight)||0;var _116=!!_100.onRelease||!!_100.onRollOver||!!_100.onRollOut;if(parseInt(_10c).toString()!=_10c&&_10c.indexOf("px")==-1){_10c=0}else{_10c=parseInt(_10c)}if(parseFloat(_111)<1){_111=100*parseFloat(_111)}var _117="";if(_108){_aa.extractFromCss(css,".sIFR-root","text-align",true)}if(!_100.modifyCss){_117=_aa.cssToString(css)}var _118=_100.wmode||"";if(!_118){if(_100.transparent){_118="transparent"}else{if(_100.opaque){_118="opaque"}}}if(_118=="transparent"){if(!ua.transparencySupport){_118="opaque"}else{_10d="transparent"}}for(var i=0;i<_102.length;i++){var node=_102[i];if(dom.hasOneOfClassses([_3e,_40,_41],node)){continue}var _11b=dom.getDimensions(node);var _11c=_11b.height;var _11d=_11b.width;var _11e=dom.getComputedStyle(node,"display");if(!_11c||!_11d||_11e==null||_11e=="none"){continue}if(_106&&ua.gecko){node.style.clear="both"}var html=null;if(_3b.fixWrap&&ua.ie&&_11e=="block"){html=node.innerHTML;node.innerHTML="X"}_11d=dom.getWidthFromStyle(node);if(html&&_3b.fixWrap&&ua.ie){node.innerHTML=html}var _120,_121;if(!_10c){var _122=calculate(node);_120=Math.min(_48,Math.max(_47,_122.lineHeight));if(_113){_120=Math.max(8,8*Math.round(_120/8))}_121=_122.lines;if(isNaN(_121)||!isFinite(_121)||_121==0){_121=1}if(_121>1&&_10b){_11c+=Math.round((_121-1)*_10b)}}else{_120=_10c;_121=1}_11c=Math.round(_121*_120);if(_106&&ua.gecko){node.style.clear=""}var _123=dom.create("span");_123.className=_41;var _124=node.cloneNode(true);node.parentNode.appendChild(_124);for(var j=0,l=_124.childNodes.length;j<l;j++){_123.appendChild(_124.childNodes[j].cloneNode(true))}if(_100.modifyContent){_100.modifyContent(_124,_100.selector)}if(_100.modifyCss){_117=_100.modifyCss(css,_124,_100.selector)}var _127=_3b.fixHover&&dom.contentIsLink(_124);var _128=handleContent(_124,_110,_100.uriEncode);_124.parentNode.removeChild(_124);if(_100.modifyContentString){_128.text=_100.modifyContentString(_128.text,_100.selector)}if(_128.text==""){continue}var _129=Math.round(_121*getRatio(_120,_114)*_120)+_4c+_115;var _12a=_109?_11d:"100%";var vars=["content="+_aa.escape(_128.text),"antialiastype="+(_100.antiAliasType||""),"width="+_11d,"height="+_11c,"renderheight="+_129,"fitexactly="+_108,"tunewidth="+(_100.tuneWidth||0),"tuneheight="+_115,"offsetleft="+(_100.offsetLeft||""),"offsettop="+(_100.offsetTop||""),"thickness="+(_100.thickness||""),"sharpness="+(_100.sharpness||""),"kerning="+_10e,"gridfittype="+_10f,"flashfilters="+_105,"opacity="+_111,"blendmode="+(_100.blendMode||""),"size="+_120,"css="+_aa.escape(_117),"selectable="+(_100.selectable==null?"true":_100.selectable),"fixhover="+_127,"preventwrap="+_10a,"forcesingleline="+_107,"link="+_aa.escape(_128.primaryLink[0]||""),"target="+_aa.escape(_128.primaryLink[1]||""),"events="+_116,"cursor="+_112,"version="+_4d];var _12c=encodeVars(vars);var _12d="sIFR_callback_"+_4e++;var _12e=new CallbackInfo(_12d,vars,_109,{onReplacement:_100.onReplacement,onRollOver:_100.onRollOver,onRollOut:_100.onRollOut,onRelease:_100.onRelease});window[_12d+"_DoFSCommand"]=(function(_12f){return function(info,arg){_12f.handle(info,arg)}})(_12e);_123.setAttribute("id",_12d+"_alternate");var _132=ua.ie?dom.swf.ie:dom.swf.other;var _133=dom.swf.create(_132,ua.fixFocus&&_100.fixFocus,_12d,_12a,_129,src,_12c,_118,_10d);_12e.html=_132.insert(node,_133);_3b.callbacks.push(_12e);if(_100.selector){if(!_3b.callbacks[_100.selector]){_3b.callbacks[_100.selector]=[_12e]}else{_3b.callbacks[_100.selector].push(_12e)}}node.appendChild(_123);dom.addClass(_3e,node)}_d5.fragmentIdentifier.restore()};this.getCallbackByFlashElement=function(node){for(var i=0;i<_3b.callbacks.length;i++){if(_3b.callbacks[i].id==node.getAttribute("id")){return _3b.callbacks[i]}}};this.redraw=function(){for(var i=0;i<_3b.callbacks.length;i++){_3b.callbacks[i].resetMovie()}};function encodeVars(vars){return vars.join("&").replace(/%/g,"%25")}function handleContent(_138,_139,_13a){_13a=_13a||_aa.uriEncode;var _13b=[],_13c=[],_13d=[];var _13e=_138.childNodes;var i=0;while(i<_13e.length){var node=_13e[i];if(node.nodeType==3){var text=_aa.normalize(node.nodeValue);text=_aa.textTransform(_139,text);text=text.replace(/</g,"&lt;");_13c.push(text)}if(node.nodeType==1){var _142=[];var _143=node.nodeName.toLowerCase();var _144=node.className||"";if(/\s+/.test(_144)){if(_144.indexOf(_42)>-1){_144=_144.match("(\\s|^)"+_42+"-([^\\s$]*)(\\s|$)")[2]}else{_144=_144.match(/^([^\s]+)/)[1]}}if(_144!=""){_142.push("class=\""+_144+"\"")}if(_143=="a"){var href=_13a(node.getAttribute("href")||"");var _146=node.getAttribute("target")||"";_142.push("href=\""+href+"\"","target=\""+_146+"\"");if(_13d.length==0){_13d=[href,_146]}}_13c.push("<"+_143+(_142.length>0?" ":"")+_142.join(" ")+">");if(node.hasChildNodes()){_13b.push(i);i=0;_13e=node.childNodes;continue}else{if(!/^(br|img)$/i.test(node.nodeName)){_13c.push("</",node.nodeName.toLowerCase(),">")}}}if(_13b.length>0&&!node.nextSibling){do{i=_13b.pop();_13e=node.parentNode.parentNode.childNodes;node=_13e[i];if(node){_13c.push("</",node.nodeName.toLowerCase(),">")}}while(i==_13e.length-1&&_13b.length>0)}i++}return {text:_13c.join("").replace(/\n|\r/g,""),primaryLink:_13d}}function CallbackInfo(id,vars,_149,_14a){this.id=id;this.vars=vars;this._events=_14a;this._forceWidth=_149;this._firedReplacementEvent=!(_14a.onReplacement!=null);this._rescale=false;this.html=null}CallbackInfo.prototype.getFlashElement=function(){return document.getElementById(this.id)};CallbackInfo.prototype.available=function(){var _14b=this.getFlashElement();return _14b&&_14b.parentNode};CallbackInfo.prototype.handle=function(info,arg){if(!this.available()){return}switch(/(FSCommand\:)?(.+)/.exec(info)[2]){case "init":this._rescale=true;break;case "resize":var _14e=this.getFlashElement();var $=arg.split(/\:|,/);_14e.setAttribute($[0],$[1]);if($.length>2){_14e.style[$[2]]=$[3]+"px"}if(ua.khtml){var _150=_14e.offsetHeight}if(!this._firedReplacementEvent){this._events.onReplacement(this);this._firedReplacementEvent=true}if(this._rescale){this._rescale=false;var cb=this;setTimeout(function(){cb.call("scale")},0)}break;case "resetmovie":this.resetMovie();break;case "blur":dom.blurElement(this.getFlashElement());break;case "event":if(this._events[arg]){this._events[arg](this)}break;default:if(this.debugHandler&&/(FSCommand\:)?debug/.test(info)){this.debugHandler(info,arg)}}};CallbackInfo.prototype.call=function(type,_153){if(!this.available()){return false}var _154=this.getFlashElement();try{_154.SetVariable("callbackType",type);_154.SetVariable("callbackValue",_153);_154.SetVariable("callbackTrigger",true)}catch(e){return false}return true};CallbackInfo.prototype.replaceText=function(_155,_156){var _157=_aa.escape(_155);if(this.call("replacetext",_157)){this.updateVars("content",_157);var node=this.getAlternate();if(_156){while(node.firstChild){node.removeChild(node.firstChild)}for(var i=0;i<_156.length;i++){node.appendChild(_156[i])}}else{try{node.innerHTML=_155}catch(e){}}return true}return false};CallbackInfo.prototype.updateVars=function(name,_15b){for(var i=0;i<this.vars.length;i++){if(this.vars[i].split("=")[0]==name){this.vars[i]=name+"="+_15b;break}}if(!ua.ie){this.injectVars(this.getFlashElement());this.injectVars(this.html)}};CallbackInfo.prototype.injectVars=function(_15d){var _15e=_15d.getElementsByTagName("param");for(var i=0;i<_15e.length;i++){if(_15e[i].getAttribute("name")=="flashvars"){_15e[i].setAttribute("value",encodeVars(this.vars));break}}};CallbackInfo.prototype.resetMovie=function(){if(!this.available()){return}var _160=this.getFlashElement();var node=_160.parentNode;if(ua.ie){this.html=this.html.replace(/(flashvars(=|\"\svalue=)\")[^\"]+/,"$1"+encodeVars(this.vars));node.replaceChild(dom.nodeFromHtml(this.html),_160)}else{node.replaceChild(this.html.cloneNode(true),_160)}};CallbackInfo.prototype.resize=function(){if(!this.available()){return}var _162=this.getFlashElement();var _163=_162.offsetWidth;if(_163==0){return}var _164=_162.getAttribute("width");var _165=_162.getAttribute("height");var _166=this.getAncestor();var _167=dom.getHeightFromStyle(_166);_162.style.width="0px";_162.style.height="0px";_166.style.minHeight=_167+"px";var _168=this.getAlternate().childNodes;var _169=[];for(var i=0;i<_168.length;i++){var node=_168[i].cloneNode(true);_169.push(node);_166.appendChild(node)}var _16c=dom.getWidthFromStyle(_166);for(var i=0;i<_169.length;i++){_166.removeChild(_169[i])}_162.style.width=_162.style.height=_166.style.minHeight="";_162.setAttribute("width",this._forceWidth?_16c:_164);_162.setAttribute("height",_165);if(_16c!=_163){this.call("resize",_16c)}};CallbackInfo.prototype.changeCSS=function(css){css=_aa.escape(_aa.cssToString(_aa.convertCssArg(css)));this.updateVars("css",css);return this.call("changecss",css)};CallbackInfo.prototype.getAlternate=function(){return document.getElementById(this.id+"_alternate")};CallbackInfo.prototype.getAncestor=function(){var _16e=this.getFlashElement().parentNode;return !dom.hasClass(_44,_16e)?_16e:_16e.parentNode}};

/*
if($.browser.msie && $.browser.version == 6) {
	sIFR = {};
	$.each(['replace', 'activate'], function(index, method) {
		sIFR[method] = function() { return; };
	});
}
*/

var ApopratRegular = {
	src: '/_ApoLayouts/swf/font-apopratregular.swf',
	css: 'text-transform: lowercase'
};
sIFR.activate(ApopratRegular);

sIFR.replace(ApopratRegular, {
	selector: '.sifr_white',
	wmode: 'transparent',
	css: ['.sIFR-root {color: #FFFFFF;}']
});
sIFR.replace(ApopratRegular, {
	selector: '.sifr_black',
	wmode: 'transparent',
	css: ['.sIFR-root {color: #000000;}']
});

sIFR.replace(ApopratRegular, {
	selector: '.sifr_pink',
	wmode: 'transparent',
	css: ['.sIFR-root {color: #d11560;}']
});

sIFR.replace(ApopratRegular, {
	selector: 'div.tema_alpin .sifr_tema',
	wmode: 'transparent',
	css: ['.sIFR-root {leading: -6; color: #3f98df;}']
});

sIFR.replace(ApopratRegular, {
	selector: 'div.tema_tropik .sifr_tema',
	wmode: 'transparent',
	css: ['.sIFR-root {leading: -6; color: #49c779;}']
});

sIFR.replace(ApopratRegular, {
	selector: 'div.tema_solcharter .sifr_tema',
	wmode: 'transparent',
	css: ['.sIFR-root {leading: -6; color: #f3ad08;}']
});

sIFR.replace(ApopratRegular, {
	selector: 'div.tema_storstad .sifr_tema',
	wmode: 'transparent',
	css: ['.sIFR-root {leading: -6; color: #00b2ca;}']
});

sIFR.replace(ApopratRegular, {
	selector: 'div.theme-general .sifr_tema',
	wmode: 'transparent',
	css: ['.sIFR-root {leading: -6; color: #000000;}']
});

sIFR.replace(ApopratRegular, {
	selector: 'div.theme-general.theme-xmas .sifr_tema',
	wmode: 'transparent',
	css: ['.sIFR-root {leading: -6; color: #d91e2b;}']
});

sIFR.replace(ApopratRegular, {
	selector: '.tema_sommar h1',
	wmode: 'transparent',
	css: ['.sIFR-root {color: #2d796b;}']
});
/*
sIFR.replace(ApopratRegular, {
	selector: '.theme-general h2',
	wmode: 'transparent',
	css: ['.sIFR-root {color: #000000;}']
});
*/
sIFR.replace(ApopratRegular, {
	selector: 'h1',
	wmode: 'transparent',
	css: ['.sIFR-root {leading: -15;}'],
	ratios: [7, 1.47, 10, 1.43, 15, 1.36, 19, 1.34, 23, 1.32, 27, 1.31, 30, 1.3, 33, 1.31, 34, 1.29, 35, 1.3, 47, 1.29, 53, 1.28, 54, 1.29, 71, 1.28, 73, 1.27, 74, 1.28, 77, 1.27, 81, 1.28, 84, 1.27, 85, 1.28, 1.27]
});


//sIFR.debug.ratios(ApopratRegular, { selector: 'h1', wmode:'transparent'});

/* SWFObject v2.1 <http://code.google.com/p/swfobject/>
	Copyright (c) 2007-2008 Geoff Stearns, Michael Williams, and Bobby van der Sluis
	This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
*/
var swfobject=function(){var b="undefined",Q="object",n="Shockwave Flash",p="ShockwaveFlash.ShockwaveFlash",P="application/x-shockwave-flash",m="SWFObjectExprInst",j=window,K=document,T=navigator,o=[],N=[],i=[],d=[],J,Z=null,M=null,l=null,e=false,A=false;var h=function(){var v=typeof K.getElementById!=b&&typeof K.getElementsByTagName!=b&&typeof K.createElement!=b,AC=[0,0,0],x=null;if(typeof T.plugins!=b&&typeof T.plugins[n]==Q){x=T.plugins[n].description;if(x&&!(typeof T.mimeTypes!=b&&T.mimeTypes[P]&&!T.mimeTypes[P].enabledPlugin)){x=x.replace(/^.*\s+(\S+\s+\S+$)/,"$1");AC[0]=parseInt(x.replace(/^(.*)\..*$/,"$1"),10);AC[1]=parseInt(x.replace(/^.*\.(.*)\s.*$/,"$1"),10);AC[2]=/r/.test(x)?parseInt(x.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof j.ActiveXObject!=b){var y=null,AB=false;try{y=new ActiveXObject(p+".7")}catch(t){try{y=new ActiveXObject(p+".6");AC=[6,0,21];y.AllowScriptAccess="always"}catch(t){if(AC[0]==6){AB=true}}if(!AB){try{y=new ActiveXObject(p)}catch(t){}}}if(!AB&&y){try{x=y.GetVariable("$version");if(x){x=x.split(" ")[1].split(",");AC=[parseInt(x[0],10),parseInt(x[1],10),parseInt(x[2],10)]}}catch(t){}}}}var AD=T.userAgent.toLowerCase(),r=T.platform.toLowerCase(),AA=/webkit/.test(AD)?parseFloat(AD.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,q=false,z=r?/win/.test(r):/win/.test(AD),w=r?/mac/.test(r):/mac/.test(AD);/*@cc_on q=true;@if(@_win32)z=true;@elif(@_mac)w=true;@end@*/return{w3cdom:v,pv:AC,webkit:AA,ie:q,win:z,mac:w}}();var L=function(){if(!h.w3cdom){return }f(H);if(h.ie&&h.win){try{K.write("<script id=__ie_ondomload defer=true src=//:><\/script>");J=C("__ie_ondomload");if(J){I(J,"onreadystatechange",S)}}catch(q){}}if(h.webkit&&typeof K.readyState!=b){Z=setInterval(function(){if(/loaded|complete/.test(K.readyState)){E()}},10)}if(typeof K.addEventListener!=b){K.addEventListener("DOMContentLoaded",E,null)}R(E)}();function S(){if(J.readyState=="complete"){J.parentNode.removeChild(J);E()}}function E(){if(e){return }if(h.ie&&h.win){var v=a("span");try{var u=K.getElementsByTagName("body")[0].appendChild(v);u.parentNode.removeChild(u)}catch(w){return }}e=true;if(Z){clearInterval(Z);Z=null}var q=o.length;for(var r=0;r<q;r++){o[r]()}}function f(q){if(e){q()}else{o[o.length]=q}}function R(r){if(typeof j.addEventListener!=b){j.addEventListener("load",r,false)}else{if(typeof K.addEventListener!=b){K.addEventListener("load",r,false)}else{if(typeof j.attachEvent!=b){I(j,"onload",r)}else{if(typeof j.onload=="function"){var q=j.onload;j.onload=function(){q();r()}}else{j.onload=r}}}}}function H(){var t=N.length;for(var q=0;q<t;q++){var u=N[q].id;if(h.pv[0]>0){var r=C(u);if(r){N[q].width=r.getAttribute("width")?r.getAttribute("width"):"0";N[q].height=r.getAttribute("height")?r.getAttribute("height"):"0";if(c(N[q].swfVersion)){if(h.webkit&&h.webkit<312){Y(r)}W(u,true)}else{if(N[q].expressInstall&&!A&&c("6.0.65")&&(h.win||h.mac)){k(N[q])}else{O(r)}}}}else{W(u,true)}}}function Y(t){var q=t.getElementsByTagName(Q)[0];if(q){var w=a("embed"),y=q.attributes;if(y){var v=y.length;for(var u=0;u<v;u++){if(y[u].nodeName=="DATA"){w.setAttribute("src",y[u].nodeValue)}else{w.setAttribute(y[u].nodeName,y[u].nodeValue)}}}var x=q.childNodes;if(x){var z=x.length;for(var r=0;r<z;r++){if(x[r].nodeType==1&&x[r].nodeName=="PARAM"){w.setAttribute(x[r].getAttribute("name"),x[r].getAttribute("value"))}}}t.parentNode.replaceChild(w,t)}}function k(w){A=true;var u=C(w.id);if(u){if(w.altContentId){var y=C(w.altContentId);if(y){M=y;l=w.altContentId}}else{M=G(u)}if(!(/%$/.test(w.width))&&parseInt(w.width,10)<310){w.width="310"}if(!(/%$/.test(w.height))&&parseInt(w.height,10)<137){w.height="137"}K.title=K.title.slice(0,47)+" - Flash Player Installation";var z=h.ie&&h.win?"ActiveX":"PlugIn",q=K.title,r="MMredirectURL="+j.location+"&MMplayerType="+z+"&MMdoctitle="+q,x=w.id;if(h.ie&&h.win&&u.readyState!=4){var t=a("div");x+="SWFObjectNew";t.setAttribute("id",x);u.parentNode.insertBefore(t,u);u.style.display="none";var v=function(){u.parentNode.removeChild(u)};I(j,"onload",v)}U({data:w.expressInstall,id:m,width:w.width,height:w.height},{flashvars:r},x)}}function O(t){if(h.ie&&h.win&&t.readyState!=4){var r=a("div");t.parentNode.insertBefore(r,t);r.parentNode.replaceChild(G(t),r);t.style.display="none";var q=function(){t.parentNode.removeChild(t)};I(j,"onload",q)}else{t.parentNode.replaceChild(G(t),t)}}function G(v){var u=a("div");if(h.win&&h.ie){u.innerHTML=v.innerHTML}else{var r=v.getElementsByTagName(Q)[0];if(r){var w=r.childNodes;if(w){var q=w.length;for(var t=0;t<q;t++){if(!(w[t].nodeType==1&&w[t].nodeName=="PARAM")&&!(w[t].nodeType==8)){u.appendChild(w[t].cloneNode(true))}}}}}return u}function U(AG,AE,t){var q,v=C(t);if(v){if(typeof AG.id==b){AG.id=t}if(h.ie&&h.win){var AF="";for(var AB in AG){if(AG[AB]!=Object.prototype[AB]){if(AB.toLowerCase()=="data"){AE.movie=AG[AB]}else{if(AB.toLowerCase()=="styleclass"){AF+=' class="'+AG[AB]+'"'}else{if(AB.toLowerCase()!="classid"){AF+=" "+AB+'="'+AG[AB]+'"'}}}}}var AD="";for(var AA in AE){if(AE[AA]!=Object.prototype[AA]){AD+='<param name="'+AA+'" value="'+AE[AA]+'" />'}}v.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+AF+">"+AD+"</object>";i[i.length]=AG.id;q=C(AG.id)}else{if(h.webkit&&h.webkit<312){var AC=a("embed");AC.setAttribute("type",P);for(var z in AG){if(AG[z]!=Object.prototype[z]){if(z.toLowerCase()=="data"){AC.setAttribute("src",AG[z])}else{if(z.toLowerCase()=="styleclass"){AC.setAttribute("class",AG[z])}else{if(z.toLowerCase()!="classid"){AC.setAttribute(z,AG[z])}}}}}for(var y in AE){if(AE[y]!=Object.prototype[y]){if(y.toLowerCase()!="movie"){AC.setAttribute(y,AE[y])}}}v.parentNode.replaceChild(AC,v);q=AC}else{var u=a(Q);u.setAttribute("type",P);for(var x in AG){if(AG[x]!=Object.prototype[x]){if(x.toLowerCase()=="styleclass"){u.setAttribute("class",AG[x])}else{if(x.toLowerCase()!="classid"){u.setAttribute(x,AG[x])}}}}for(var w in AE){if(AE[w]!=Object.prototype[w]&&w.toLowerCase()!="movie"){F(u,w,AE[w])}}v.parentNode.replaceChild(u,v);q=u}}}return q}function F(t,q,r){var u=a("param");u.setAttribute("name",q);u.setAttribute("value",r);t.appendChild(u)}function X(r){var q=C(r);if(q&&(q.nodeName=="OBJECT"||q.nodeName=="EMBED")){if(h.ie&&h.win){if(q.readyState==4){B(r)}else{j.attachEvent("onload",function(){B(r)})}}else{q.parentNode.removeChild(q)}}}function B(t){var r=C(t);if(r){for(var q in r){if(typeof r[q]=="function"){r[q]=null}}r.parentNode.removeChild(r)}}function C(t){var q=null;try{q=K.getElementById(t)}catch(r){}return q}function a(q){return K.createElement(q)}function I(t,q,r){t.attachEvent(q,r);d[d.length]=[t,q,r]}function c(t){var r=h.pv,q=t.split(".");q[0]=parseInt(q[0],10);q[1]=parseInt(q[1],10)||0;q[2]=parseInt(q[2],10)||0;return(r[0]>q[0]||(r[0]==q[0]&&r[1]>q[1])||(r[0]==q[0]&&r[1]==q[1]&&r[2]>=q[2]))?true:false}function V(v,r){if(h.ie&&h.mac){return }var u=K.getElementsByTagName("head")[0],t=a("style");t.setAttribute("type","text/css");t.setAttribute("media","screen");if(!(h.ie&&h.win)&&typeof K.createTextNode!=b){t.appendChild(K.createTextNode(v+" {"+r+"}"))}u.appendChild(t);if(h.ie&&h.win&&typeof K.styleSheets!=b&&K.styleSheets.length>0){var q=K.styleSheets[K.styleSheets.length-1];if(typeof q.addRule==Q){q.addRule(v,r)}}}function W(t,q){var r=q?"visible":"hidden";if(e&&C(t)){C(t).style.visibility=r}else{V("#"+t,"visibility:"+r)}}function g(s){var r=/[\\\"<>\.;]/;var q=r.exec(s)!=null;return q?encodeURIComponent(s):s}var D=function(){if(h.ie&&h.win){window.attachEvent("onunload",function(){var w=d.length;for(var v=0;v<w;v++){d[v][0].detachEvent(d[v][1],d[v][2])}var t=i.length;for(var u=0;u<t;u++){X(i[u])}for(var r in h){h[r]=null}h=null;for(var q in swfobject){swfobject[q]=null}swfobject=null})}}();return{registerObject:function(u,q,t){if(!h.w3cdom||!u||!q){return }var r={};r.id=u;r.swfVersion=q;r.expressInstall=t?t:false;N[N.length]=r;W(u,false)},getObjectById:function(v){var q=null;if(h.w3cdom){var t=C(v);if(t){var u=t.getElementsByTagName(Q)[0];if(!u||(u&&typeof t.SetVariable!=b)){q=t}else{if(typeof u.SetVariable!=b){q=u}}}}return q},embedSWF:function(x,AE,AB,AD,q,w,r,z,AC){if(!h.w3cdom||!x||!AE||!AB||!AD||!q){return }AB+="";AD+="";if(c(q)){W(AE,false);var AA={};if(AC&&typeof AC===Q){for(var v in AC){if(AC[v]!=Object.prototype[v]){AA[v]=AC[v]}}}AA.data=x;AA.width=AB;AA.height=AD;var y={};if(z&&typeof z===Q){for(var u in z){if(z[u]!=Object.prototype[u]){y[u]=z[u]}}}if(r&&typeof r===Q){for(var t in r){if(r[t]!=Object.prototype[t]){if(typeof y.flashvars!=b){y.flashvars+="&"+t+"="+r[t]}else{y.flashvars=t+"="+r[t]}}}}f(function(){U(AA,y,AE);if(AA.id==AE){W(AE,true)}})}else{if(w&&!A&&c("6.0.65")&&(h.win||h.mac)){A=true;W(AE,false);f(function(){var AF={};AF.id=AF.altContentId=AE;AF.width=AB;AF.height=AD;AF.expressInstall=w;k(AF)})}}},getFlashPlayerVersion:function(){return{major:h.pv[0],minor:h.pv[1],release:h.pv[2]}},hasFlashPlayerVersion:c,createSWF:function(t,r,q){if(h.w3cdom){return U(t,r,q)}else{return undefined}},removeSWF:function(q){if(h.w3cdom){X(q)}},createCSS:function(r,q){if(h.w3cdom){V(r,q)}},addDomLoadEvent:f,addLoadEvent:R,getQueryParamValue:function(v){var u=K.location.search||K.location.hash;if(v==null){return g(u)}if(u){var t=u.substring(1).split("&");for(var r=0;r<t.length;r++){if(t[r].substring(0,t[r].indexOf("="))==v){return g(t[r].substring((t[r].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(A&&M){var q=C(m);if(q){q.parentNode.replaceChild(M,q);if(l){W(l,true);if(h.ie&&h.win){M.style.display="block"}}M=null;l=null;A=false}}}}}();
// String extensions
jQuery.extend(String.prototype, {
	Left: function(characterCount)
	{
		return this.substring(0,characterCount);
	},
	
	// Right
	Right: function(characterCount)
	{
		return this.substring((this.length - characterCount), this.length);
	},
	
	// Mid
	Mid: function(start, end)
	{
		if(!start){start=0};
		if(!end || end > this.length){end=this.length};
		if(end != this.length){end = start + end};
		return this.substring(start,end);
	},
	
	// Replace
	Replace: function(replaceThis, replaceWith)
	{
		var retval = this;
		while(retval.indexOf(replaceThis) > -1){
			retval = retval.replace(replaceThis,replaceWith);
		}
		return retval;
	},
	
	// Trim
	Trim: function()
	{
		var retval = this;
		retval = this.TrimStart();
		return retval.TrimEnd();
	},
	
	// TrimStart
	TrimStart: function ()
	{
		var retval = this;
		while(retval.charAt(0)==" "){
			retval = retval.replace(retval.charAt(0),"");
		}
		return retval;
	},
	
	// TrimEnd
	TrimEnd: function ()
	{
		var retval = this;
		while(retval.charAt((retval.length -1))==" "){
			retval = retval.substring(0,retval.length-1);
		}
		return retval;
	},
	
	// RemoveAllWhitespace
	RemoveAllWhitespace: function ()
	{
		var exp = new RegExp('\\s{1,}', 'gi');
		return this.replace(exp, '');
	}
	
});


// Returns a value of a field as a string.
// Will return checkbox lists etc as a comma separated string
jQuery.fn.fieldStringVal = function(successful) {
	var retval = new String();
	if (this.length > 0){
		var elm = this[0];
		var name = new String(elm.name);
		var t = elm.type;
		if (t == "checkbox" || t == "radio"){
			if (name == ""){
				if (elm.checked) retval = elm.id;
			}
			else{
				/* See if it's a checkbox / radiobutton list */
				/* Find all controls of the same name */
				jQuery("input[@name=" + name + "]").each(function(){
					if (this.checked){
						if (retval != "") retval += ",";
						retval += this.id;
					}
				});
			}
		}
		else if (t == "select-one" || t == "select-multiple"){
			for (var i=0; i<elm.length; i++){
				if (elm.options[i].selected){
					if (retval != "") retval += ",";
					retval += elm.options[i].value;
				}
			}
		}
		else{
			retval = elm.value;
		}
	}
	return jQuery.trim(retval);
};


(function($) {

	// default options
	var defaults = {
		method: 'get'
	};
	
	// extend jquery scope
	$.extend($,  {
		validator: {
			// properties
			rules: {},
			methods: {},
			filters: {},
			messages: {},
			templates: {},
			plugins: {},
			// methods
			addRule: function(key, rules) {
				this.rules[key] = rules;
			},
			addMethod: function(key, fn, msg) {
				this.methods[key] = fn;
				this.messages[key] = msg;
			},
			addFilter: function(key, fn) {
				this.filters[key] = fn;
			},
			addTemplate: function(key, string){
				this.templates[key] = string;
			},
			addPlugin: function(key, fn){
				this.plugins[key] = fn;
			},
			getRule: function(key) {
				if (key == '*') return this.rules;
				return this.rules[key];
			},
			getMethod: function(key) {
				if (key == '*') return this.methods;
				return this.methods[key];
			},
			getMethodMessage: function(key) {
				if (key == '*') return this.messages;
				return this.messages[key];
			},
			getFilter: function(key) {
				if (key == '*') return this.filters;
				return this.filters[key];
			},
			getPlugin: function(key) {
				if (key == '*') return this.plugins;
				return this.plugins[key];
			},
			isRuleValid: function(key) {
				if (this.rules[key]) return true;
				return false;
			},
			isElementCheckable: function(element) {
				return /radio|checkbox/i.test(element.type);
			},
			capitalizeString: function(string) {
				return string.substr(0, 1).toUpperCase() + string.substr(1);
			},
			findReplacementTemplateString: function(string, key) {
				var arr = string.match(new RegExp("\\{(" + key + ")\\}","gi"));
				if(!arr) return [];
				$.each(arr, function(key, val) {
					arr[key] = val.replace(new RegExp("\\{|\\}","gi"),'');
				});
				return arr;
			},
			lowerCaseCompare: function(string, compare) {
				var a = string, b = compare;
				if(a.toLowerCase() == b.toLowerCase()) return true;
				return false;
			},
			isFirstLetterUppercase: function(string) {
				if(/^[A-Z]+$/.test(string.substr(0, 1))) return true;
				return false;
			},
			formatTemplate: function(string, params) {
				var me = this;
				if(!string) return;
				// replace params
				$.each(params, function(key, value) {
					if(value) {
						var templateKeys = me.findReplacementTemplateString(string, key);
						$.each(templateKeys, function(index, templateKey){
							if(templateKey && me.lowerCaseCompare(templateKey,key) && me.isFirstLetterUppercase(templateKey)) {
								templateValue = me.capitalizeString(value);
							} else {
								templateValue = value;
							}
							string = me.formatTemplateString(string, templateKey, templateValue);							 
						});
					}
				});
				return string;
			},
			formatTemplateString: function(string, find, replace){
				if (!string) return;
				string = string.replace(new RegExp("\\{" + find + "\\}", "g"), replace);
				return string;
			},
			validateByMethod: function(key, value, element, label, params){
				var metadata = $(element).metadata() || false;
				// merge label with params, before sending it to formatTemplate
				var formatTemplateParams = {
					label: label
				};
				for(var i=0,n=params.length;i<n;i++) {
					formatTemplateParams[i] = params[i];
					if($(params[i]).prev('label').text() != "") {
						formatTemplateParams[i+'_label'] = $(params[i]).prev('label').text();
					}
				}
				return {
					valid: this.getMethod(key).call(this, value, element, params),
					message: this.formatTemplate(
						(
							(metadata && metadata.messages && metadata.messages[key]) ?
								metadata.messages[key] :
								this.getMethodMessage(key)
						), formatTemplateParams
					)
				};
			},
			validateByRule: function(options, ruleKey, label, element) {
				var value = $(element).val();
				var i;
				var rule = this.getRule(ruleKey);
				var validatedMethods = {
					valid: [],
					invalid: []
				};
				if(label !== false && typeof label == 'undefined' || label === true) {
					label = $.trim($('label[for='+element.id+']:eq(0)').text().replace(/\*(\s*)?$/,''));
				}
				var obj = $.data($(element).parents('fieldset.validate').get(0),'validation');
				
				// apply filters
				if (rule && rule.filters) {
					for (i in rule.filters) {
						var filter = this.getFilter(i);
						if (filter) {
							$(element).val(filter.call(this, value, element, $.makeArray(rule.filters[i])));
						}
					}
					value = $(element).val();
				}
				
				// dependency
				if (rule && rule.dependency) {
					var dependencyValid = true;
					for (i = 0, n = rule.dependency.length; i < n; i++) {
						var dependency = rule.dependency[i];
						var result = this.validateByMethod(dependency[0], value, element, label, $.makeArray(dependency[1]), {}).valid;
						if(dependencyValid) {
							dependencyValid = result; 
						}
					}
					if (!dependencyValid) {
						this.getPlugin('rowError').call(this, value, element, label, [], [true]);
						return true;
					}
				}
				
				// rules
				if(rule && rule.methods) {
					for(i in rule.methods) {
						var result = this.validateByMethod(i, value, element, label, $.makeArray(rule.methods[i]), {});
						if (result.valid) {
							validatedMethods.valid.push(result);
						}
						else {
							validatedMethods.invalid.push(result);
						}
					}
				}

				//group
				if ($(element).hasClass('group')) {
					var result = this.validateByMethod('group', '', element, label, []);
					if(result.valid) {
						validatedMethods.valid.push(result);
					}
					else {
						validatedMethods.invalid.push(result);
					}
				}
				
				// build error messages
				var messages = [];
				for (i = 0, n = validatedMethods.invalid.length; i < n; i++) {
					messages.push({
						message: validatedMethods.invalid[i].message,
						id: element.id
					});
				}
				
				if (rule && rule.plugins) {
					for (i in rule.plugins) {
						var plugin = this.getPlugin(i);
						if (plugin) {
							plugin.call(this, value, element, label, messages, $.makeArray(rule.plugins[i]));
						}
					}
				}
				if (rule && $(element).hasClass('group')) {
					this.getPlugin('rowError').call(this, value, element, label, messages, [true]);
				}
				
				// format messages with templates.
				if (messages.length > 0) {
					var templatedMessages = [];
					for (i = 0, n = messages.length; i < n; i++) {
						templatedMessages.push(this.formatTemplate($.validator.templates.body, messages[i]));
					}
					// add error message header
					templatedMessages.unshift(this.formatTemplate($.validator.templates.header, {
						label: label
					}));
					// add error message footer
					templatedMessages.push(this.formatTemplate($.validator.templates.footer, {
						label: label
					}));
					
					if(obj && obj.useSummary && obj.errorContainer && !obj.messages[label]) {
						if (!$(element).is(":submit")) {
							var msg = $(templatedMessages.join(''));
							$(obj.errorContainer).append(msg);
							obj.messages[label] = msg;
						}
					}
					return false;
				}
				else if(obj && obj.messages && obj.messages[label]) {
					$(obj.messages[label]).remove();
					obj.messages[label] = null;
				}
				return true;
			},
			getMethodsByValidity: function(arr, valid){
				return this.filterMethods(arr, 'valid', valid);
			},
			filterMethods: function(arr, filterKey, filterVal){
				var filter = [];
				for(var i=0,n=arr.length;i<n;i++) {
					if (arr[i][filterKey] === filterVal) {
						filter.push(val);
					} 
				}
				return filter;
			},
			validateGroup: function(onlyActived, options, isSubmitButton) {
				var div = $(this);
				if(this.tagName.toLowerCase() != 'div' || !div.hasClass('group')) {
					div = div.parents('div.group');
				}
				if(div.size() < 1) {
					return true;
				}
				var groupIsValid = false;
				div.find(':input').not(div.find('div.exclude :input')).each(function() {
					var result = (
						$.validator.validateElement.call(this, {}) && (
						(this.type == 'text' && $(this).val() != '') || (
							(this.type == 'radio' || this.type == 'checkbox') && 
								$(this).is(':checked')
							)
						)
					); //validateElement needs to be run, regardless...
					if(!groupIsValid) {
						groupIsValid = result;
					}
				});
				
				if(groupIsValid) {
					div.removeClass('group_error');
				}
				else {
					div.addClass('group_error');
				}
				$.data(div.get(0), 'valid', groupIsValid);
				return $.validator.validateByRule({}, '', div.metadata().label, div.get(0));
			},
			validateElement: function(event, options) {
				var metadata = $(this).metadata();
				if (metadata && metadata.rule && $.validator.isRuleValid(metadata.rule)) {
					return $.validator.validateByRule({}, metadata.rule, metadata.label, this);
				}
				// if no rule is found the element is valid.
				return true;
			},
			validateFieldset: function(onlyActivated, options, isSubmitButton) {
				var fieldset = this;
				if (fieldset.tagName.toLowerCase() != 'fieldset') {
					fieldset = $(fieldset).parents('fieldset.validate').get(0);
				}
				if (fieldset.tagName.toLowerCase() != 'fieldset') {
					return true
				}
				
				var key = $.data(fieldset);
				
				var obj = $.data(fieldset, 'validation');
				if (!obj) {
					obj = $.data(fieldset, 'validation', {
						messages: {}
					});
				}
				
				if (isSubmitButton === true && $(fieldset).hasClass('useSummary')) {
					obj.useSummary = true;
					var errorSummaryElement;
					var errorClass = $(fieldset).metadata().errorContainerClass;
					if (!errorClass) {
						errorClass = 'error_summary';
					}
					errorSummaryElement = $(fieldset).find('.' + errorClass);
					if (errorSummaryElement.size() < 1) {
						errorSummaryElement = $('.'+errorClass);
					}
					if (errorSummaryElement.size() > 0) {
						$(errorSummaryElement).show();
						obj.errorContainer = $(errorSummaryElement).get(0);
					}
				}
				
				var valid = true;
				var inputs = $.makeArray($(fieldset).find(':input').not(':hidden'));
				var validatedInputs = [];
				
				for(var i=0,n=inputs.length;i<n;i++) {
					var input = inputs[i];
					
					if ($.inArray(input, validatedInputs) >= 0 || (onlyActivated && !$.data(input, 'activated')) || (input.type && input.type == 'submit')) {
						continue;
					}
					
					var group = $(input).parents('div.group').get(0);
					if(!!group && $(input).parents('div.exclude').size() < 1) {
						var allActivated = true;
						var allEmpty = true;
						var inputsInGroup = $.makeArray($(group).find(':input').not($(group).find('div.group :input, div.exclude :input')));
						validatedInputs = validatedInputs.concat(inputsInGroup);
						if (!isSubmitButton) {
							for(var j=0,m=inputsInGroup.length;j<m;j++) {
								allActivated = (($.data(inputsInGroup[j], 'activated') == true) && allActivated);
								allEmpty = (
									(
										(
											(inputsInGroup[j].type == 'text' || inputsInGroup[j].type == 'password') &&
											$(inputsInGroup[j]).val() == ''
										) ||
										(
											(inputsInGroup[j].type =='checkbox' || inputsInGroup[j].type == 'radio') &&
											!$(inputsInGroup[j]).is(':checked')
										)
									) &&
									allEmpty
								);
							}
						}
						if (allActivated || !allEmpty) {
							valid = ($.validator.validateGroup.call(group, false, {}) && valid);
						}
						else if($.validator.getRule($(input).metadata().rule).methods.required) {
							valid = ($.validator.validateElement.call(input, {}) && valid);
						}
					}
					else {
						valid = ($.validator.validateElement.call(input, {}) && valid);
					}
				}
				$.data(fieldset, 'isValid', valid);
				if (!valid && obj.useSummary && obj.errorContainer) {
					$(obj.errorContainer).show();
				}
				
				if (fieldset.tagName.toLowerCase() == 'fieldset') $(this).trigger('validator.post-fieldset-validation',[valid]);
				
				return valid;
			},
			_hookValidation: function() { //Expects fieldsets
				$(this).find(':input').not('.skipValidation').keydown(function(event) {
					if ($.validator.submitIntent && event.keyCode == 9) {
						$.validator.submitIntentTabbed = true;
					}
					if(event.keyCode == 13 && event.target.tagName.toLowerCase() != 'textarea') {
    					$.validator.submitIntent = true;
						$(event.target).parents('fieldset.validate').find(':submit').trigger('click',[true]);
						return false;
					}
				}).one('focus', '', function(event) {
					if(this.type && this.type != 'submit') {
						$.data(this, 'initialValue', this.value);
						$.data(this, 'activated', true);
					}
				}).bind('blur', '', function(event) {
					if (!$.browser.msie) { //IE6 och 7 kÃ¶r focus/blur otime:at, sÃ¥ man fÃ¥r focus/select fel i textboxens vÃ¤rde vid tabbning. Man ser alltsÃ¥ INTE var man tabbade nÃ¥gonstans
						if (this.value == $.data(this, 'initialValue')) { //Kontrollerar sÃ¥ att det initiala vÃ¤rdet, t.ex. som sÃ¤tts av serversida, Ã¤r OK
							$(this).trigger('change');
						}
					}
				}).bind('keydown', '', function(event) {
					if (event.keyCode == 9 && $.browser.msie && this.value == $.data(this, 'initialValue')) { //FÃ¶r att Ã¥tminstone tÃ¤cka ett av tvÃ¥ usecase dÃ¥  man tabbar ur formulÃ¤ret, se blur funktionen ovan
						$(this).trigger('change');
					}
				}).change(function(event) {
					if((!$.validator.submitIntent || $.validator.submitIntentTabbed) && this.type && this.type != 'submit') {
						$.validator.validateFieldset.call(event.target, true, {});
					}
				}).click(function(event) {
					if((!$.validator.submitIntent || $.validator.submitIntentTabbed) && this.type && this.type == 'checkbox' && $.browser.msie) {
						$.validator.validateFieldset.call(event.target, true, {});
					}
				}).filter(':submit').click(function(event, enterKey) {
				    if(!preventSubmitEvent) {
					    var formIsValid = true;
					    if($(this).metadata().rule) {
						    formIsValid = ($.validator.validateElement.call(this, {}) && formIsValid);
					    }
					    else {
						    formIsValid = ($.validator.validateFieldset.call(this, false, {}, true) && formIsValid);
					    }
					    if (!enterKey) {
						    var disabled = this.disabled;
						    $(this).addClass('makeVisible').get(0).disabled = false;
						    this.focus();
						    $(this).removeClass('makeVisible').get(0).disabled = disabled;
					    }
					    return formIsValid;
				    }
				}).bind('mouseenter', function() {
					$.validator.submitIntent = true;
					$.validator.submitIntentTabbed = false;
				}).bind('mouseleave', function() {
					$.validator.submitIntent = false;
					$.validator.submitIntentTabbed = true;
				})
			}
		}
	});
	
	$.validator.addTemplate("header","<ul><li><strong>{Label}</strong><ul>");
	$.validator.addTemplate("body","<li><label for=\"{id}\">{message}</label></li>");
	$.validator.addTemplate("footer","</ul></li></ul>");
	$.validator.addMethod("group", function(value, element, params) {
		return ($(element).hasClass('group') && !!$.data(element, 'valid')); // !! to force true or false return
	}, "Fyll i minst ett vÃ¤rde");
	$.validator.addMethod("required", function(value,element,params) {
			switch( element.nodeName.toLowerCase() ) {
				case 'select':
					return $("option:selected", element).length > 0;
				case 'input':
					if(this.isElementCheckable(element)) {
						return $(element).find(':checked').length > 0;
					}
					return value.length > 0;
				default:
					return value.length > 0;
			}
	}, "FÃ¤ltet {label} Ã¤r obligatoriskt. VÃ¤nligen ange {label}.");
	
	$.validator.addMethod("fieldsets", function(value, element, params) {
		var ids = $(element).metadata().ids;
		if(!ids) {
			return true;
		}
		var fieldsets = $.makeArray($('fieldset.validate'));
		var valid = true;
		for(var i=0,n=fieldsets.length;i<n;i++) {
			if($.inArray($(fieldsets[i]).metadata().id, ids) > -1) {
				valid = ($.validator.validateFieldset.call(fieldsets[i], false, params, true) && valid);
			}
		}
		return valid;
	}, "");
	
	$.validator.addMethod("deliverySearch", function(value, element, params) {
		return $('input[name=delivery_adress]').is(':checked');
	}, 'VÃ¤nligen {1} Apotek/ombud');
	
	$.validator.addMethod("notempty", function(value,element,params) {
		return (value != "");
	}, "FÃ¤ltet {label} mÃ¥ste anges");
	$.validator.addMethod("email", function(value,element,params) {
		//return /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(value); //Dobermans e-postvalidering
		return /^[a-zA-Z\_\-\.0-9]+[@]{1}[a-z\-\.0-9]+[\.]{1}[a-z]{2,}$/.test(value.toLowerCase()); //ETC e-postvalidering
	}, "FÃ¤ltet {label} mÃ¥ste anges med fÃ¶ljande format x@x.xx. Svenska tecknen Ã¥, Ã¤ och Ã¶ Ã¤r inte tillÃ¥tna tecken.");
	
	$.validator.addMethod("digit", function(value,element,params) {
		if(value.length === 0) {
			return true;
		}
		return	/^[\d\s]+$/i.test(value);
	}, "FÃ¤ltet {label} fÃ¥r endast innehÃ¥lla siffror");
	
	$.validator.addMethod("digitDash", function(value,element,params) {
		return	/^[\d\-]+$/i.test(value);
	}, "FÃ¤ltet {label} fÃ¥r endast innehÃ¥lla siffror och bindestreck");
	
	$.validator.addMethod("telephone", function(value,element,params) {
		return /^[0\+][1-9][\d]+$/i.test(value);
	}, "FÃ¤ltet {label} fÃ¥r endast innehÃ¥lla siffror och mÃ¥ste bÃ¶rja pÃ¥ 0 eller +");

	$.validator.addMethod("telephoneFull", function(value,element,params) {
		return /^[0\+][1-9][\d]+$/i.test(value);
	}, "FÃ¤ltet {label} fÃ¥r endast innehÃ¥lla siffror och måste börja på 0 eller +");
//		return /^[\d\s\+\-\(\)]+$/i.test(value);
//	}, "FÃ¤ltet {label} fÃ¥r endast innehÃ¥lla siffror och +, ( ), bindestreck och mellanslag.");
	
	$.validator.addMethod("socialplusnumber", function(value,element,params) {
		var social_result = this.getMethod('socialnumber').apply(this, [value, element, params]);
		if(value.length == 12 && value.charAt(0) == 9) {
			value = value.substr(1);
		}
		var plus_result = this.getMethod('plusnumber').apply(this, [value, element, params]);
		return (social_result || plus_result);
	}, "FÃ¤ltet {label} mÃ¥ste vara ett giltigt personnummer, 12 tecken, eller Pluskortnummer, 11 tecken.");
	
	$.validator.addMethod("plusnumber", function(value,element,params) {
		return /^8[\d]{10}$/i.test(value);
	}, "FÃ¤ltet {label} mÃ¥ste vara 11 tecken lÃ¥ngt, fÃ¥r endast innehÃ¥lla siffror och mÃ¥ste inledas med siffran 8.");
	
	$.validator.addMethod("socialnumber", function(value,element,params) {
		value = value.replace(/[\s\-]+/g,'');
		if(!/^[\d]{12}$/i.test(value)) {
			return false;
		}
		if(value.substr(4,2) > 12 ||value.substr(4,2) < 0 ){
			return false;
		}
		if(value.substr(6,2) > 31){
			return false;
		}
		if(value.substr(4,2) == 02 && value.substr(6,2)> 29){
			return false;
		}
		if((value.substr(4,2) == 04 || value.substr(4,2) == 06 || value.substr(4,2) == 09 || value.substr(4,2) == 11 ) && (value.substr(6,2)) > 30){
			return false;
		}
		if(value.substr(0,2) < 18 || value.substr(0,2)> 20){
			return false;
		}
		var last = value.substr(value.length-1);
		var pnr = value.substr(2,value.length-3);
		var arr = pnr.split('');
		var res = [];
		for(var i=0,n=arr.length;i<n;i++) {
			res = res.concat((arr[i] * (((i+1)%2)+1)).toString().split(''));
		}
		var v = 0;
		for(var i=0,n=res.length;i<n;i++) {
			v+=parseInt(res[i], 10);
		}
		v %= 10;
		if(v > 0) {
			v = 10 - v;
		}
		return (/^[\d]{12}$/i.test(value) && last == v);
	}, "FÃ¤ltet {label} mÃ¥ste vara ett giltigt personnummer, 12 tecken lÃ¥ngt och fÃ¥r endast innehÃ¥lla siffror.");
	
	$.validator.addMethod("minage", function(value,element,params) {
		if(value.length < 8) {
			return true;
		}
		var val = value.replace(/[\s\-]+/g,'');
		var values = [
			val.substr(0,4),
			val.substr(4,2),
			val.substr(6,2)
		];
		var date_now = new Date();
		if(date_now.getFullYear() - values[0] > params[0]) {
			return true;
		}
		else if(date_now.getFullYear() - values[0] == params[0]) {
			if((date_now.getMonth()+1) > values[1]) {
				return true;
			}
			else if((date_now.getMonth()+1) == values[1]) {
				if(date_now.getDate() >= values[2]) {
					return true;
				}
			}
		}
		return false;
	}, "Ã…ldern mÃ¥ste minst vara {0} Ã¥r");
	
	$.validator.addMethod("securitycode", function(value,element,params) {
		return /^[\d]{7}$/.test(value);
	}, "FÃ¤ltet {label} Ã¤r obligatoriskt och mÃ¥ste vara 7 siffror. VÃ¤nligen ange personlig kod");
	
	$.validator.addMethod("alpha", function(value,element,params) {
		return (value.length < 1) || /^[a-z\ü\'\u00E5\u00E4\u00F6\s\d:\-ï¿½Å½`~Å¡\\Ã©\Ã¡^]+$/i.test(value);
	}, "FÃ¤ltet {label} fÃ¥r endast innehÃ¥lla [a-Ã–, 0-9, -, mellanslag, Â´, `, ~, Â¨, ^].");
	
	$.validator.addMethod("alphapunctuation", function(value,element,params) {
		return (value.length < 1) || /^[a-z\ü\'\u00E5\u00E4\u00F6\s\d:\.\,\-Å½`~Å¡\\Ã©\Ã¡^]+$/i.test(value);
	}, "FÃ¤ltet {label} fÃ¥r endast innehÃ¥lla [a-Ã–, 0-9, -, mellanslag, punkt, kommatecken, Â´, `, ~, Â¨, ^].");
	
	$.validator.addMethod("exactlength", function(value,element,params) {
		return (value.length == params[0]);
	}, "FÃ¤ltet {label} behÃ¶ver vara {0} tecken");
	
	$.validator.addMethod("minlength", function(value,element,params) {
		return value.length >= params[0];
	}, "FÃ¤ltet {Label} mÃ¥ste bestÃ¥ av minst {0} tecken");
	
	$.validator.addMethod("maxlength", function(value,element,params) {
		return value.length <= params[0];
	}, "FÃ¤ltet {Label} fÃ¥r inte bestÃ¥ av fler Ã¤n {0} tecken");
	
	$.validator.addMethod("checked", function(value,element,params) {
		return ((params[0] === true) ? $(element).is(':checked') : $(params[0]).is(':checked'));
	}, "FÃ¤ltet {label} mÃ¥ste markeras");
	
	$.validator.addMethod("valueNotEqual", function(value,element,params) {
		
		return ($(element).val() != params[0]);
	}, "FÃ¤ltet {label} Ã¤r ogiltigt");

	$.validator.addMethod("valueEqual", function(value,element,params) {
		return $(element).val() == params[0];
	}, "FÃ¤ltet {label} mÃ¥ste stÃ¤mma Ã¶verens");
	
	$.validator.addMethod("valueEqualElement", function(value,element,params) {
		return $(element).val() == $(params[0]).val();
	}, "FÃ¤ltet {label} mÃ¥ste stÃ¤mma Ã¶verens med {0_label}");
	
	$.validator.addMethod("elementValueEqual", function(value,element,params) {
		return $(params[0]).val() == params[1];
	}, "FÃ¤ltet {label} mÃ¥ste stÃ¤mma Ã¶verens");

	$.validator.addMethod("zipcode", function(value,element,params) {
		return /[1-9]{1}\d{4}/.test($(element).val());
	}, "Ej giltigt svenskt postnummer");
	
	$.validator.addMethod("visible", function(value,element,params) {
		return $(element).is(':visible');
	}, "FÃ¤ltet {label} Ã¤r ogiltigt");
	
	$.validator.addMethod("dependency", function(value,element,params,options) {
		return params[0].apply(this,[value,element].concat(params.slice(1)));
	}, "FÃ¤ltet {Label} Ã¤r beroende av fÃ¤ltet {2}.");
	
	$.validator.addFilter("removeDoubleSpaces", function(value,element,params) {
		return value.replace(/\s+/g, ' ');
	});
	
	$.validator.addFilter("removeSpaces", function(value,element,params) {
		return value.replace(/\s/g, '');
	});
	
	$.validator.addTemplate("rowError","<p class=\"error_message\">{message}</p>");
	$.validator.addPlugin("rowError", function(value, element, label, messages, params) {
		var html = [];
		var el = $(element);
		var div = el;
		
		if(!el.hasClass('group')) {
			div = el.parents('div:not(.addErrorRowToParent):eq(0)');
			if(div.parents('fieldset').size() > 0) {
				div.addClass('row_error');
			}
			else {
			    if(!$.validator.submitIntent) {
    			    el.prev('label').andSelf().wrapAll('<div class="row_error"></div>');
			    }
			}
			div = el.parents('div.row_error:eq(0)')
		}
		
		div.find('p.error_message').remove();
		var n = messages.length;
		if(n > 0) {
			for (var i = 0; i < n; i++) {
				html.push(this.formatTemplate($.validator.templates.rowError, messages[i]));
			}
			div.append(html.join(''));
		}
		else {
			el.removeClass('row_error');
			div.removeClass('row_error');
		}
	});
	
	$.validator.addPlugin("deliverySearch", function(value, element, label, messages, params) {
		var html = [];
		var el = $(element);
		var div = el;
		if(!el.hasClass('group')) {
			div = el.parents('div:not(.addErrorRowToParent):eq(0)');
			if(div.parents('fieldset').size() < 1) {
				el.prev('label').andSelf().wrapAll('<div class="row_error"></div>');
				div = el.parents('div.row_error:eq(0)')
			}
		}
		
		div.children('p.error_message').remove();
		var msg = $('input[name=delivery_adress]').size() > 0 ? 'vÃ¤lj' : 'fyll i';
		var n = messages.length;
		var radios = $('input[name=delivery_adress]');
		var data = $.data(element, 'deliverySearch');
        var radiosVisible = $("#searchResult").text().length > 0;

		if(n > 0 && (!radiosVisible || (!!data && !!data.empty) || (radios.size() > 0 && !radios.is(':checked')))) {
			for (var i = 0; i < n; i++) {
				messages[i].message = messages[i].message.replace('{1}', msg);
				html.push(this.formatTemplate($.validator.templates.rowError, messages[i]));
			}
			div.addClass('row_error').append(html.join(''));
		}
		else {
			el.removeClass('row_error');
			div.removeClass('row_error');
		}
	});
	
	// extend plugin scope
	$.extend($.fn, {
		validator: function(options){
			// merge default options with extended.
			$(this).find('fieldset.validate').each($.validator._hookValidation);
		}
	});	
})(jQuery);
$.validator.addRule('validatorVR101', {
	dependency: [['notempty', true]],
	methods: {
		maxlength: 50,
		alphapunctuation: true
	},
	filters: {
		removeDoubleSpaces: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorRequiredVR101', {
	methods: {
		required: true,
		maxlength: 50,
		alphapunctuation: true
	},
	filters: {
		removeDoubleSpaces: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorVR102', {
	dependency: [['notempty', true]],
	methods: {
		minlength: 8,
		maxlength: 16,
		telephone: true
	},
	filters: {
		removeDoubleSpaces: true
	},
	plugins: {
		rowError: true
	}
});
$.validator.addRule('validatorVR102Full', {
	dependency: [['notempty', true]],
	methods: {
		minlength: 8,
		maxlength: 16,
		telephoneFull: true
	},
	filters: {
		removeDoubleSpaces: true
	},
	plugins: {
		rowError: true
	}
});
$.validator.addRule('validatorRequiredVR102', {
	methods: {
		required: true,
		maxlength: 16,
		telephone: true
	},
	filters: {
		removeDoubleSpaces: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorVR103', {
	dependency: [['notempty', true]],
	methods: {
		maxlength: 200,
		email: true
	},
	filters: {
		removeDoubleSpaces: true
	},
	plugins: {
		rowError: true
	}
});
$.validator.addRule('validatorRequiredVR103', {
	methods: {
		required: true,
		maxlength: 200,
		email: true
	},
	filters: {
		removeDoubleSpaces: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorVR103-2', {
	methods: {
		dependency: [['checked', '#userinput_checkbox']],
		maxlength: 200,
		email: true
	},
	filters: {
		removeDoubleSpaces: true
	},
	plugins: {
		rowError: true
	}
});
$.validator.addRule('validatorVR103-3', {
	dependency: [['elementValueEqual', ['select#optionMemberLetterType', 'E']], ['checked', '#memberletter_yes']],
	methods: {
		required: true,
		maxlength: 200,
		email: true
	},
	filters: {
		removeDoubleSpaces: true
	},
	plugins: {
		rowError: true
	}
});
$.validator.addRule('mailReceiptCopy', {
	dependency: [['checked', '#ctl00_PlaceHolderMain_ApoApproval_checkbox_approved_mail_receipt']],
	methods: {
		maxlength: 200,
		email: true
	},
	filters: {
		removeDoubleSpaces: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorVR105', {
	methods: {
		maxlength: 240
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorVR106', {
	dependency: [['notempty', true]],
	methods: {
		maxlength: 50,
		alphapunctuation: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorRequiredVR106', {
	methods: {
		required: true,
		maxlength: 50,
		alphapunctuation: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorVR107', {
	dependency: [['notempty', true]],
	methods: {
		exactlength: 5,
		digit: true
	},
	filters: {
		removeSpaces: true
	},
	plugins: {
		rowError: true
	}
});
$.validator.addRule('validatorVR107u', {
	dependency: [['notempty', true]],
	methods: {
		minlength: 2,
		maxlength: 10,
		alpha: true
	},
	filters: {
		removeSpaces: true
	},
	plugins: {
		rowError: true
	}
});
$.validator.addRule('validatorRequiredVR107', {
	methods: {
		required: true,
		exactlength: 5,
		digit: true,
		zipcode: true // RiGi: Bug 1997
	},
	filters: {
		removeSpaces: true
	},
	plugins: {
		rowError: true
	}
});
$.validator.addRule('validatorRequiredVR107u', {
	methods: {
		required: true,
		minlength: 2,
		maxlength: 10,
		alpha: true
	},
	filters: {
		removeSpaces: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorVR108', {
	methods: {
		maxlength: 50,
		alpha: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorRequiredVR108', {
	methods: {
		required: true,
		maxlength: 50,
		alphapunctuation: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorVR115-116', {
	dependency: [['notempty', true]],
	methods: {
		socialplusnumber: true
	},
	filters: {
		removeSpaces: true
	},
	plugins: {
		rowError: true
	}
});
$.validator.addRule('validatorRequiredVR115-116', {
	methods: {
		required: true,
		socialplusnumber: true
	},
	filters: {
		removeSpaces: true
	},
	plugins: {
		rowError: true
	}
});


/* knowit rules */
$.validator.addRule('validatorVR200', {
	dependency: [['checked', '#radioButtonCreditCardPayment']],
	methods: {
		valueNotEqual: 'none'
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorVR201', {
	dependency: [['checked', '#radioButtonCreditCardPayment']],
	methods: {
		minlength: 1,
		maxlength: 38,
		digit: true
	},
	filters: {
		removeDoubleSpaces: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorVR202', {
	dependency: [['checked', '#radioButtonCreditCardPayment']],
	methods: {
		required: true,
		minlength: 3,
		maxlength: 4,
		digit: true
	},
	filters: {
		removeDoubleSpaces: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorPlusNummer', {
	methods: {
		plusnumber: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorRequiredPlusNummer', {
	methods: {
		required: true,
		plusnumber: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorPersonNummer', {
	methods: {
		socialnumber: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorRequiredPersonNummer', {
	methods: {
		required: true,
		socialnumber: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorPersonNummerMinAge16', {
	methods: {
		socialnumber: true,
		minage: 16
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorRequiredPersonNummerMinAge16', {
	methods: {
		required: true,
		socialnumber: true,
		minage: 16
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorPersonNummerMinAge18', {
	methods: {
		socialnumber: true,
		minage: 18
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorRequiredPersonNummerMinAge18', {
	methods: {
		required: true,
		socialnumber: true,
		minage: 18
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorNotEmpty', {
	methods: {
		notempty: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('minProfilSecurityCode', {
	methods: {
		securitycode: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('minProfilSecurityCodeMatch', {
	methods: {
		valueEqualElement: 'input#min_profil_security_code'
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('checked', {
	methods: {
		checked: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('req6-10', {
	methods: {
		required: true,
		minlength: 6,
		maxlength: 10
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validateFieldsets', {
	methods: {
		fieldsets: true
	}
});

$.validator.addRule('deliverySearch', {
	dependency: [['checked', '#delivery_suboption_2'], ['checked', '#shippingmethod_APO']],
	methods: {
		deliverySearch: true
	},
	plugins: {
		deliverySearch: true
	}
});
$.validator.addRule('deliverySearchNoChecked', {
	methods: {
		deliverySearch: true
	},
	plugins: {
		deliverySearch: true
	}
});

$.validator.addRule('servicesCheckboxEmail', {
	dependency: [['visible', true]],
	methods: {
		email: true
	},
	filters: {
		removeSpaces: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('servicesCheckboxTelephone', {
	dependency: [['visible', true]],
	methods: {
		maxlength: 20,
		telephone: true
	},
	filters: {
		removeSpaces: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('digit', {
	dependency: [['notempty', true]],
	methods: {
		digit: true
	},
	filters: {
		removeSpaces: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('digitRequired', {
	methods: {
		required: true,
		digit: true
	},
	filters: {
		removeSpaces: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('profileCountry', {
	dependency: [['elementValueEqual', ['select#optionForeignAddress_plus', '2']]],
	methods: {
		notempty: true,
		valueNotEqual: 'SE',
		required: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('profileSendLetterType', {
	dependency: [['elementValueEqual', ['select#optionForeignAddress_plus', '2']], ['checked', 'input#memberletter_yes']],
	methods: {
		notempty: true,
		valueNotEqual: 'B',
		required: true
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('profileVardApotek', {
	methods: {
		checked: '#searchResult input[name=delivery_adress]'
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('minProfilPassword', {
	dependency: [['notempty', true]],
	methods: {
		minlength: 6,
		maxlength: 10
	},
	plugins: {
		rowError: true
	}
});
$.validator.addRule('minProfilPasswordMatch', {
	methods: {
		valueEqualElement: '#NewPassword'
	},
	plugins: {
		rowError: true
	}
});
$.validator.addRule('validatorRequiredMaxlength200', {
	methods: {
		required: true,
		maxlength: 200
	},
	plugins: {
		rowError: true
	}
});
$.validator.addRule('validatorRequiredMaxlength500', {
	methods: {
		required: true,
		maxlength: 500
	},
	plugins: {
		rowError: true
	}
});

$.validator.addRule('validatorRequiredVR102-booking-1', {
	dependency: [['checked', '#radio-1']],
	methods: {
		maxlength: 16,
		required: true,
		telephone: true
	},
	filters: {
		removeDoubleSpaces: true
	},
	plugins: {
		rowError: true
	}
});
$.validator.addRule('validatorRequiredVR102-booking-2', {
	dependency: [['checked', '#radio-2']],
	methods: {
		maxlength: 16,
		required: true,
		telephone: true
	},
	filters: {
		removeDoubleSpaces: true
	},
	plugins: {
		rowError: true
	}
});

/*
 * Super simple exist method, if size is zero the function breaks the jQuery chain.
 */
(function($) {
	$.extend($.fn, {
		exists: function(fn) {
			var l = this.length;
			if($.isFunction(fn)) {
				if(l > 0) fn.apply(this);
				return this;
			} else {
				return (l > 0) ? true : false;
			}
		}	
	});
})(jQuery);

(function($) {
	$.uniqueId = function() {
		return arguments.callee.prefix + arguments.callee.count++;
	};
	$.uniqueId.prefix = 'uid__';
	$.uniqueId.count = 0;
	
	$.fn.uniqueId = function() {
		return this.each(function() {
			this.id = this.id || $.uniqueId();
		});
	};
})(jQuery);

/*
 * Super simple button method
 */
(function($) {
	$.extend($.fn, {
		divButton: function(cssArr) {
			return this.each(function() {
				var $button = $(this).css('display','none'); //.hide() will not work because visibility:hidden is set in javascript.css
				var value = $button.val();
				var tabIndex = $button.attr('tabindex');
				if(!tabIndex) {
					tabIndex = '';
				} else if (tabIndex > 0) {
					$button.attr('tabindex','');
					tabIndex = ' tabindex="'+tabIndex+'"';
				}
				var href = $button.metadata().href;
				if(!href || href == undefined) {
					href = '';
				} else {
					href = ' href="'+href+'"';
				}
				var classes = cssArr;
				if(classes && classes.length) {
					classes.unshift('divButton');
				}
				else {
					classes = ['divButton'];
				}
				var $divButton = $('<div class="'+ classes.join(' ') + '"><a'+tabIndex+href+'>'+ $button.val() +'</a></div>');
				$divButton.click(function() { $(this).prev(':submit').click(); });
				$button.after($divButton);	
			});
		}	
	});
})(jQuery);

/*
 * Super simple ajax tab plugin.
 */
(function($) {
	$.extend($.fn, {
		ajaxTabs: function(opts) {
			return this.each(function() {
				var $ul = $(this);
				$ul.find("li:not(.title)").click(function(e) {
					// trigger tab click event.
					$ul.trigger('ajaxTabs.click',[this]);
					// remove active classes.
					$(this).parent().find('li.active').removeClass('active');
					// add active class
					$(this).addClass('active');
					// get the a tag and the href.
					var a = $(this).find('a')[0], url = a.href;
					// send ajax request
					if(url) $.get(url);
					// cancel event
					return false;
				});
			});
		}	
	});
})(jQuery);
/*
 * Not so simple ajax button plugin.
 */
(function($) {
	// default setting will be merged with metadata
	var defaults = {
		method: 'get'
	};
	var data = {before: {}, after: {}};
	var selector = {};
	// extend jquery scope and add callbacks
	$.extend($, {
		ajaxButton: {
			registerCallback: function(id,fn) {
				data[id] = fn;
			},
			execCallback: function(callback,context,event) {
				$.each(callback, function(i,id) {
					var d = data[id];
					if(d) d.apply(context,[event]);
				});
			},
			registerParamSelector: function(id,fn) {
				selector[id] = fn;
			},
			execParamSelector: function(id,context,event) {
				var s = selector[id];
				if(s) return s.apply(context,[event]);
			}
		}
	});
	// extend plugin scope
	$.extend($.fn, {
		ajaxButton: function(opts) {
			return this.each(function() {
				var $a = $(this).click(function(event) {
					// extract metadata
					var meta = $(this).metadata();
					if(!meta.href) return true; //no ajax, follow link
					// merge defaults with metadata, and do some error checking
					var opts = $.extend(defaults,meta);
					var href = opts.href || null;
					var param = opts.param || {};
					var paramSelector = opts.paramSelector || [];
					var callback = opts.callback || [];
					var before = opts.before || [];
					// only post/get if a href exists
					if(href) {
                        // hack to support https
                		var protocol = window.parent.document.location.protocol;
		                if (protocol == 'https:' && href.substring(0,5) == 'http:' ) {
		                	href = 'https' + href.substring(4);
		                }
						// execute beforeCallbacks.
						$.ajaxButton.execCallback(before,$a[0],event);
						// lock the UI
						$().trigger('blockUI');
						// merge params with paramSelector
						$.each(paramSelector, function(i,o) {
							$.extend(param,$.ajaxButton.execParamSelector(o,$a[0],event));
						});
						// add active class
						$a.addClass('buyactive');
						// call get/post methods
						$[opts.method.toLowerCase()](href, param, function() {
							$.ajaxButton.execCallback(callback,$a[0],event);
							$a.removeClass('buyactive');
							// unlook the UI
							$().trigger('unblockUI');
						});
					}
					// cancel event
					return false;
				});
			});
		}
	});
	
	/* Useless?
	$.ajaxButton.registerCallback('shoppingcart', function(e) {
		//console.log('shoppingcart');
	});
	*/
	$.ajaxButton.registerCallback('animateslip', function(e) {
		eventAnimateSlip();
	});
	$.ajaxButton.registerCallback('showaddedtip', function(e) {
		//console.log('showaddedtip');
		
		// run the showaddedtip(); function with the button reference
		showaddedtip(this);
		
	});
	
	$.ajaxButton.registerParamSelector('selectinputquerycollector', function(e) {
		var $input = $(this).parents('div.btncontainer').find('select, input');
		var p = {};
		$.each($input,function(i,elem) {
			var $elem = $(elem);
			var key = $elem.attr('name');
			var val = $elem.val();
			p[key] = val;
		});
		return p;
	});
	
	$.ajaxButton.registerParamSelector('puff032selectcollector', function(e) {
		var $input = $(this).parents('div.puff032:eq(0)').find('.amountholder').find('select, input');
		var p = {};
		$.each($input,function(i,elem) {
			var $elem = $(elem);
			var key = $elem.metadata().key;
			var val = $elem.val();
			if(key) p[key] = val;
		});
		return p;
	});
})(jQuery);	

/*
 * String utils.
 */
(function($) {
	// private parts
	var utils = {
		isEmpty: function(s) {
			return (s.length == 0) ? true : false;
		},
		isLength: function(string,size) {
			return (string.length == size) ? true : false;
		},
		isNotLength: function(string,size) {
			return (string.length != size) ? true : false;
		},
		isLargerThen: function(string, size) {
			return (string.length > size) ? true : false;
		},
		isSmallerThen: function(string,size) {
			return (string.length < size) ? true : false;
		},
		isLargerAndSmallerThen: function(string,small,large) {
			return (string.length > small && string.length < large) ? true : false;
		},
		stringReplace: function(string,find,replacement) {
			return string.replace(find,replacement);
		}
	};
	// extend plugin scope.
	$.extend($.fn, {
		isEmpty: function() {
			return utils.isEmpty($(this).val());
		},
		isNotEmpty: function() {
			return (utils.isEmpty($(this).val())) ? false : true;
		},
		isLength: function(size) {
			return utils.isLength($(this).val(),size);
		},
		isNotLength: function(size) {
			return utils.isNotLength($(this).val(),size);
		},
		isLargerThen: function(size) {
			return utils.isLargerThen($(this).val(),size);
		},
		isSmallerThen: function(size) {
			return utils.isSmallerThen($(this).val(),size);
		},
		isRegExp: function(exp) {
			return exp.test($(this).val());
		},
		stringReplace: function(find,replacement) {
			return this.each(function() {
				$(this).val(
					utils.stringReplace($(this).val(),find,replacement)
				);
			});
		},
		removeWhiteSpace: function() {
			return this.each(function() {
				$(this).val(
					utils.stringReplace($(this).val(),/\s+/g,'')
				);
			});
		}
	});
})(jQuery);

(function($) {
	function appendGetHeight(h) {
		var $el = $('<div></div>').css('height',h).appendTo('body');
		var h = $el.height();
		$el.remove();
		return h;
	}
	$.extend($, {
		emToPixel: function(em) {
			return appendGetHeight(em);
		},
		pixelToEm: function(p) {
			// var em = Math.round((p/appendGetHeight('1em'))*100)/100 + 'em';
			var em = p;
			alert (em + "p: " + p);
			return em;
		}
	});
})(jQuery);

/*  
 *  Pulsate
 */
(function($) {
	$.fn.pulsate = function(callback) {
		return this.each(function() {
			var el = $(this);
			var times = 8;
			var speed = 200;
			el[0].count = 0;
			for (var i = 0; i < times; i++) { // Pulsate
				el.queue(function() {
					var elem = $(this);
					var state = (this.count % 2) ? 'visible' : 'hidden';
					setTimeout(function() {
						elem[0].style.visibility = state;
						elem.dequeue();
					}, speed - (this.count * 20));
					this.count++;
				});
			};
			if(callback) el.queue(function() { callback.apply(this, arguments); });	
		});
	};
})(jQuery);
jQuery.fn.outerHTML = function() {
  return $('<div>').append( this.eq(0).clone() ).html();
};

/*
 * jQuery blockUI plugin
 * Version 2.11 (12/13/2008)
 * @requires jQuery v1.2.3 or later
 *
 * Examples at: http://malsup.com/jquery/block/
 * Copyright (c) 2007-2008 M. Alsup
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 * 
 * Thanks to Amir-Hossein Sobhi for some excellent contributions!
 */

;(function($) {

if (/1\.(0|1|2)\.(0|1|2)/.test($.fn.jquery) || /^1.1/.test($.fn.jquery)) {
    alert('blockUI requires jQuery v1.2.3 or later!  You are using v' + $.fn.jquery);
    return;
}

// global $ methods for blocking/unblocking the entire page
$.blockUI   = function(opts) { install(window, opts); };
$.unblockUI = function(opts) { remove(window, opts); };

// plugin method for blocking element content
$.fn.block = function(opts) {
    return this.each(function() {
        if ($.css(this,'position') == 'static')
            this.style.position = 'relative';
        if ($.browser.msie) 
            this.style.zoom = 1; // force 'hasLayout'
        install(this, opts);
    });
};

// plugin method for unblocking element content
$.fn.unblock = function(opts) {
    return this.each(function() {
        remove(this, opts);
    });
};

$.blockUI.version = 2.11; // 2nd generation blocking at no extra cost!

// override these in your code to change the default behavior and style
$.blockUI.defaults = {
    // message displayed when blocking (use null for no message)
    message:  '<h1>Please wait...</h1>',
    
    // styles for the message when blocking; if you wish to disable
    // these and use an external stylesheet then do this in your code:
    // $.blockUI.defaults.css = {};
    css: { 
        padding:        0,
        margin:         0,
        width:          '30%', 
        top:            '40%', 
        left:           '35%', 
        textAlign:      'center', 
        color:          '#000', 
        border:         '3px solid #aaa',
        backgroundColor:'#fff',
        cursor:         'wait'
    },
    
    // styles for the overlay
    overlayCSS:  { 
        backgroundColor:'#000', 
        opacity:        '0.6' 
    },
    
    // z-index for the blocking overlay
    baseZ: 1000,
    
    // set these to true to have the message automatically centered
    centerX: true, // <-- only effects element blocking (page block controlled via css above)
    centerY: true,
    
    // allow body element to be stetched in ie6; this makes blocking look better
    // on "short" pages.  disable if you wish to prevent changes to the body height
    allowBodyStretch: true,
    
    // be default blockUI will supress tab navigation from leaving blocking content;
    constrainTabKey: true,
    
    // fadeOut time in millis; set to 0 to disable fadeout on unblock
    fadeOut:  400,
    
    // if true, focus will be placed in the first available input field when
    // page blocking
    focusInput: true,
    
    // suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)
    applyPlatformOpacityRules: true,
    
    // callback method invoked when unblocking has completed; the callback is
    // passed the element that has been unblocked (which is the window object for page
    // blocks) and the options that were passed to the unblock call:
    //     onUnblock(element, options)
    onUnblock: null,
    
    // don't ask (if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493)
    quirksmodeOffsetHack: 4
};

// private data and functions follow...

var ie6 = $.browser.msie && /MSIE 6.0/.test(navigator.userAgent);
var pageBlock = null;
var pageBlockEls = [];

function install(el, opts) {
    var full = (el == window);
    var msg = opts && opts.message !== undefined ? opts.message : undefined;
    opts = $.extend({}, $.blockUI.defaults, opts || {});
    opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});
    var css = $.extend({}, $.blockUI.defaults.css, opts.css || {});
    msg = msg === undefined ? opts.message : msg;

    // remove the current block (if there is one)
    if (full && pageBlock) 
        remove(window, {fadeOut:0}); 
    
    // if an existing element is being used as the blocking content then we capture
    // its current place in the DOM (and current display style) so we can restore
    // it when we unblock
    if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {
        var node = msg.jquery ? msg[0] : msg;
        var data = {};
        $(el).data('blockUI.history', data);
        data.el = node;
        data.parent = node.parentNode;
        data.display = node.style.display;
        data.position = node.style.position;
        data.parent.removeChild(node);
    }
    
    var z = opts.baseZ;
    
    // blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;
    // layer1 is the iframe layer which is used to supress bleed through of underlying content
    // layer2 is the overlay layer which has opacity and a wait cursor
    // layer3 is the message content that is displayed while blocking
    
    var lyr1 = ($.browser.msie) ? $('<iframe class="blockUI" style="z-index:'+ z++ +';border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="javascript:false;"></iframe>')
                                : $('<div class="blockUI" style="display:none"></div>');
    var lyr2 = $('<div class="blockUI blockOverlay" style="z-index:'+ z++ +';cursor:wait;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>');
    var lyr3 = full ? $('<div class="blockUI blockMsg blockPage" style="z-index:'+z+';position:fixed"></div>')
                    : $('<div class="blockUI blockMsg blockElement" style="z-index:'+z+';display:none;position:absolute"></div>');

    // if we have a message, style it
    if (msg) 
        lyr3.css(css);

    // style the overlay
    if (!opts.applyPlatformOpacityRules || !($.browser.mozilla && /Linux/.test(navigator.platform))) 
        lyr2.css(opts.overlayCSS);
    lyr2.css('position', full ? 'fixed' : 'absolute');
    
    // make iframe layer transparent in IE
    if ($.browser.msie) 
        lyr1.css('opacity','0.0');

    $([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);
    
    // ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)
    var expr = $.browser.msie && (!$.boxModel || $('object,embed', full ? null : el).length > 0);
    if (ie6 || expr) {
        // give body 100% height
        if (full && opts.allowBodyStretch && $.boxModel)
            $('html,body').css('height','100%');

        // fix ie6 issue when blocked element has a border width
        if ((ie6 || !$.boxModel) && !full) {
            var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');
            var fixT = t ? '(0 - '+t+')' : 0;
            var fixL = l ? '(0 - '+l+')' : 0;
        }

        // simulate fixed position
        $.each([lyr1,lyr2,lyr3], function(i,o) {
            var s = o[0].style;
            s.position = 'absolute';
            if (i < 2) {
                full ? s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.boxModel?0:'+opts.quirksmodeOffsetHack+') + "px"')
                     : s.setExpression('height','this.parentNode.offsetHeight + "px"');
                full ? s.setExpression('width','jQuery.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"')
                     : s.setExpression('width','this.parentNode.offsetWidth + "px"');
                if (fixL) s.setExpression('left', fixL);
                if (fixT) s.setExpression('top', fixT);
            }
            else if (opts.centerY) {
                if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');
                s.marginTop = 0;
            }
        });
    }
    
    // show the message
    lyr3.append(msg).show();
    if (msg && (msg.jquery || msg.nodeType))
        $(msg).show();

    // bind key and mouse events
    bind(1, el, opts);
        
    if (full) {
        pageBlock = lyr3[0];
        pageBlockEls = $(':input:enabled:visible',pageBlock);
        if (opts.focusInput)
            setTimeout(focus, 20);
    }
    else
        center(lyr3[0], opts.centerX, opts.centerY);
};

// remove the block
function remove(el, opts) {
    var full = el == window;
    var data = $(el).data('blockUI.history');
    opts = $.extend({}, $.blockUI.defaults, opts || {});
    bind(0, el, opts); // unbind events
    var els = full ? $('body').children().filter('.blockUI') : $('.blockUI', el);
    
    if (full) 
        pageBlock = pageBlockEls = null;

    if (opts.fadeOut) {
        els.fadeOut(opts.fadeOut);
        setTimeout(function() { reset(els,data,opts,el); }, opts.fadeOut);
    }
    else
        reset(els, data, opts, el);
};

// move blocking element back into the DOM where it started
function reset(els,data,opts,el) {
    els.each(function(i,o) {
        // remove via DOM calls so we don't lose event handlers
        if (this.parentNode) 
            this.parentNode.removeChild(this);
    });

    if (data && data.el) {
        data.el.style.display = data.display;
        data.el.style.position = data.position;
        data.parent.appendChild(data.el);
        $(data.el).removeData('blockUI.history');
    }

    if (typeof opts.onUnblock == 'function')
        opts.onUnblock(el,opts);
};

// bind/unbind the handler
function bind(b, el, opts) {
    var full = el == window, $el = $(el);
    
    // don't bother unbinding if there is nothing to unbind
    if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked'))) 
        return;
    if (!full) 
        $el.data('blockUI.isBlocked', b);
        
    // bind anchors and inputs for mouse and key events
    var events = 'mousedown mouseup keydown keypress';
    b ? $(document).bind(events, opts, handler) : $(document).unbind(events, handler);

// former impl...
//    var $e = $('a,:input');
//    b ? $e.bind(events, opts, handler) : $e.unbind(events, handler);
};

// event handler to suppress keyboard/mouse events when blocking
function handler(e) {
    // allow tab navigation (conditionally)
    if (e.keyCode && e.keyCode == 9) {
        if (pageBlock && e.data.constrainTabKey) {
            var els = pageBlockEls;
            var fwd = !e.shiftKey && e.target == els[els.length-1];
            var back = e.shiftKey && e.target == els[0];
            if (fwd || back) {
                setTimeout(function(){focus(back)},10);
                return false;
            }
        }
    }
    // allow events within the message content
    if ($(e.target).parents('div.blockMsg').length > 0)
        return true;
        
    // allow events for content that is not being blocked
    return $(e.target).parents().children().filter('div.blockUI').length == 0;
};

function focus(back) {
    if (!pageBlockEls) 
        return;
    var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];
    if (e) 
        e.focus();
};

function center(el, x, y) {
    var p = el.parentNode, s = el.style;
    var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');
    var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');
    if (x) s.left = l > 0 ? (l+'px') : '0';
    if (y) s.top  = t > 0 ? (t+'px') : '0';
};

function sz(el, p) { 
    return parseInt($.css(el,p))||0; 
};

})(jQuery);

/* Revision: 100644, 1.1 was a little buggy /Johannes */
/*
 * jQuery Address Plugin v${version}
 * http://www.asual.com/jquery/address/
 *
 * Copyright (c) 2009 Rostislav Hristov
 * Dual licensed under the MIT and GPL licenses.
 * http://docs.jquery.com/License
 *
 * Date: ${timestamp}
 */
(function ($) {
 
    $.address = (function () {
    
        var _trigger = function(name) {
            $($.address).trigger(
                $.extend($.Event(name), 
                    (function() {
                        var event = {
                            value: $.address.value(),
                            path: $.address.path(),
                            pathNames: $.address.pathNames(),
                            parameterNames: $.address.parameterNames(),
                            parameters: {},
                            queryString: $.address.queryString()
                        };
                        for (var i = 0, l = event.parameterNames.length; i < l; i++)
                            event.parameters[event.parameterNames[i]] = $.address.parameter(event.parameterNames[i]);
                        return event;
                    }).call($.address)
                )
            );
        };
        
        var _bind = function(value, data, fn) {
        	$($.address).bind(value, fn || data, fn && data);
        	return $.address;
        };
    
        var _init = function() {
            _trigger('init');
        };
        
        var _change = function() {
            _trigger('change');
        };
 
        var _getHash = function() {
            var index = _l.href.indexOf('#');
            return index != -1 ? _ec(_dc(_l.href.substr(index + 1))) : '';
        };
        
    	var _getWindow = function() { 
    		try {
    			return top.document != undefined ? top : window;
    		} catch (e) { 
    			return window; 
    		}
    	};
 
        var _strictCheck = function(value, force) {
            if (_opts.strict)
                value = force ? (value.substr(0, 1) != '/' ? '/' + value : value) : (value == '' ? '/' : value);
            return value;
        };
 
        var _ieLocal = function(value, direction) {
            return (_msie && _l.protocol == 'file:') ? 
                (direction ? _value.replace(/\?/, '%3F') : _value.replace(/%253F/, '?')) : value;
        };
 
        var _searchScript = function(el) {
            for (var i = 0, l = el.childNodes.length, s; i < l; i++) {
                if (el.childNodes[i].src)
                    _url = String(el.childNodes[i].src);
                if (s = _searchScript(el.childNodes[i]))
                    return s;
            }
        };
 
        var _listen = function() {
            if (!_silent) {
                var hash = _getHash(),
                	diff = !(_value == hash);
                if (_safari && _version < 523) {
                    if (_length != _h.length) {
                        _length = _h.length;
                        if (typeof _stack[_length - 1] != UNDEFINED)
                            _value = _stack[_length - 1];
                        _update(false);
                    }
                } else if (_msie && _version < 7 && diff) {
                    _l.reload();
                } else if (diff) {
                    _value = hash;
                    _update(false);
                }
            }
        };
 
        var _update = function(internal) {
            _change();
            if (internal) {
            	_trigger('internalChange');
            } else {
            	_trigger('externalChange');
            }
            _st(_track, 10);
        };
 
        var _track = function() {
            var value = (_l.pathname + (/\/$/.test(_l.pathname) ? '' : '/') + $.address.value()).replace(/\/\//, '/').replace(/^\/$/, ''),
            	fn = window[_opts.tracker];
            if (typeof fn == FUNCTION)
                fn(value);
            else if (typeof pageTracker != UNDEFINED && typeof pageTracker._trackPageview == FUNCTION)
                pageTracker._trackPageview(value);
            else if (typeof urchinTracker == FUNCTION) 
                urchinTracker(value);
        };
        
        var _htmlWrite = function() {
            var doc = _frame.contentWindow.document;
            doc.open();
            doc.write('<html><head><title>' + _d.title + '</title><script>var ' + ID + ' = "' + _getHash() + '";</script></head></html>');
            doc.close();
        };
 
        var _load = function() {
            if (!_loaded) {
                _loaded = TRUE;
                if (_msie && _version < 8) {
                    var frameset = _d.getElementsByTagName('frameset')[0];
                    _frame = _d.createElement((frameset ? '' : 'i') + 'frame');
                    if (frameset) {
                        frameset.insertAdjacentElement('beforeEnd', _frame);
                        frameset[frameset.cols ? 'cols' : 'rows'] += ',0';
                        _frame.src = 'javascript:false';
                        _frame.noResize = true;
                        _frame.frameBorder = _frame.frameSpacing = 0;
                    } else {
                        _frame.src = 'javascript:false';
                        _frame.style.display = 'none';
                        _d.body.insertAdjacentElement('afterBegin', _frame);
                    }
                    _st(function() {
                        $(_frame).bind('load', function() {
                            var win = _frame.contentWindow;
                            var src = win.location.href;
                            _value = (typeof win[ID] != UNDEFINED ? win[ID] : '');
                            if (_value != _getHash()) {
                                _update(false);
                                _l.hash = _ieLocal(_value, TRUE);
                            }
                        });
                        if (typeof _frame.contentWindow[ID] == UNDEFINED) 
                            _htmlWrite();
                    }, 50);
                } else if (_safari) {
                    if (_version < 418) {
                        $(_d.body).append('<form id="' + ID + '" style="position:absolute;top:-9999px;" method="get"></form>');
                        _form = _d.getElementById(ID);
                    }
                    if (typeof _l[ID] == UNDEFINED) _l[ID] = {};
                    if (typeof _l[ID][_l.pathname] != UNDEFINED) _stack = _l[ID][_l.pathname].split(',');
                }
                
                _st(function() {
                    _init();
                    _update(false);
                }, 1);
                
                if (_msie && _version >= 8)
                    _d.body.onhashchange = _listen;
                else
                    _si(_listen, 50);
                $('a[rel*=address:]').address();
            }
        };
 
        var ID = 'jQueryAddress',
            FUNCTION = 'function',
            UNDEFINED = 'undefined',
            TRUE = true,
            FALSE = false,
            _browser = $.browser, 
            _version = parseFloat($.browser.version),
            _mozilla = _browser.mozilla,
            _msie = _browser.msie,
            _opera = _browser.opera,
            _safari = _browser.safari,
            _supported = FALSE,
            _t = _getWindow(),
            _d = _t.document,
            _h = _t.history, 
            _l = _t.location,
            _si = setInterval,
            _st = setTimeout, 
            _dc = decodeURI,
            _ec = encodeURI,
            _agent = navigator.userAgent,            
            _frame,
            _form,
            _url,
            _title = _d.title, 
            _length = _h.length, 
            _silent = FALSE,
            _loaded = FALSE,
            _justset = TRUE,
            _juststart = TRUE,
            _stack = [], 
            _listeners = {}, 
            _value = _getHash(),
            _api = {},
            _opts = {history: TRUE, strict: TRUE};
        
        if (_msie) {
            _version = parseFloat(_agent.substr(_agent.indexOf('MSIE') + 4));
            if (_d.documentMode && _d.documentMode != _version)
            	_version = _d.documentMode != 8 ? 7 : 8;
        }
        
        _supported = 
            (_mozilla && _version >= 1) || 
            (_msie && _version >= 6) ||
            (_opera && _version >= 9.5) ||
            (_safari && _version >= 312);
            
        if (_supported) {
        
            for (var i = 1; i < _length; i++)
                _stack.push('');
                
            _stack.push(_getHash());
        
            if (_msie && _l.hash != _getHash())
                _l.hash = '#' + _ieLocal(_getHash(), TRUE);
 
            if (_opera) 
                history.navigationMode = 'compatible'; 
            
            _searchScript(document);
            var _qi = _url.indexOf('?');
            if (_url && _qi > -1) {
                var param, params = _url.substr(_qi + 1).split('&');
                for (var i = 0, p; p = params[i]; i++) {
                    param = p.split('=');
                    if (/^(history|strict)$/.test(param[0])) {
                        _opts[param[0]] = (isNaN(param[1]) ? /^(true|yes)$/i.test(param[1]) : (parseInt(param[1]) != 0));
                    }
                    if (/^tracker$/.test(param[0]))
                        _opts[param[0]] = param[1];
                }
            }
 
            $(_load);
            
        } else if ((!_supported && _l.href.indexOf('#') != -1) || 
            (_safari && _version < 418 && _l.href.indexOf('#') != -1 && _l.search != '')){
            _d.open();
            _d.write('<html><head><meta http-equiv="refresh" content="0;url=' + 
                _l.href.substr(0, _l.href.indexOf('#')) + '" /></head></html>');
            _d.close();
        } else {
            _track();
        }
 
        return {
        	init: function(data, fn){
            	$(this).bind('init', fn || data, fn && data);
            	return this;
        	},
        	change: function(data, fn){
            	$(this).bind('change', fn || data, fn && data);
            	return this;
        	},
        	internalChange: function(data, fn){
            	$(this).bind('internalChange', fn || data, fn && data);
            	return this;
        	},
        	externalChange: function(data, fn){
            	$(this).bind('externalChange', fn || data, fn && data);
            	return this;
        	},
        	baseURL: function() {
                var url = _l.href;
                if (url.indexOf('#') != -1)
                    url = url.substr(0, url.indexOf('#'));
                if (url.substr(url.length - 1) == '/')
                    url = url.substr(0, url.length - 1);
                return url;
        	},
        	strict: function(value) {
        		if (value !== undefined) {
        			_opts.strict = value;
        			return this;
        		}
    			return _opts.strict;
            },
            history: function(value) {
        		if (value !== undefined) {
        			_opts.history = value;
        			return this;
        		}
    			return _opts.history;
            },
            tracker: function(value) {
        		if (value !== undefined) {
        			_opts.tracker = value;
        			return this;
        		}
    			return _opts.tracker;
            },
            title: function(value) {
            	if (value !== undefined) {
            		value = _dc(value);
                    _st(function() {
                        _title = _d.title = value;
                        if (_juststart && _frame && _frame.contentWindow && _frame.contentWindow.document) {
                            _frame.contentWindow.document.title = value;
                            _juststart = FALSE;
                        }
                        if (!_justset && _mozilla)
                            _l.replace(_l.href.indexOf('#') != -1 ? _l.href : _l.href + '#');
                        _justset = FALSE;
                    }, 50);
                    return this;
            	}
                return _d.title;
        	},
            value: function(value) {
        		if (value !== undefined) {
                    value = _ec(_dc(_strictCheck(value, TRUE)));
                    if (value == '/') value = '';
                    if (_value == value) return;
                    _justset = TRUE;
                    _value = value;
                    _silent = TRUE;
                    _update(true);
                    _stack[_h.length] = _value;
                    if (_safari) {
                        if (_opts.history) {
                            _l[ID][_l.pathname] = _stack.toString();
                            _length = _h.length + 1;
                            if (_version < 418) {
                                if (_l.search == '') {
                                    _form.action = '#' + _value;
                                    _form.submit();
                                }
                            } else if (_version < 523 || _value == '') {
                                var evt = _d.createEvent('MouseEvents');
                                evt.initEvent('click', TRUE, TRUE);
                                var anchor = _d.createElement('a');
                                anchor.href = '#' + _value;
                                anchor.dispatchEvent(evt);                
                            } else {
                                _l.hash = '#' + _value;
                            }
                        } else {
                            _l.replace('#' + _value);
                        }
                    } else if (_value != _getHash()) {
                        if (_opts.history)
                            _l.hash = '#' + _ieLocal(_value, TRUE);
                        else
                            _l.replace('#' + _value);
                    }
                    if ((_msie && _version < 8) && _opts.history) {
                        _st(_htmlWrite, 50);
                    }
                    if (_safari)
                        _st(function(){ _silent = FALSE; }, 1);
                    else
                        _silent = FALSE;
                    return this;
        		}
                if (!_supported) return null;
                return _dc(_strictCheck(_ieLocal(_value, FALSE), FALSE));
            },
            path: function(value) {
            	if (value !== undefined) {
                    var qs = this.queryString();
                	this.value(value + (qs ? '?' + qs : ''));
                	return this;
            	}
                var value = this.value();
                return (value.indexOf('?') != -1) ? value.split('?')[0] : value;
            },
            queryString: function(value) {
            	if (value !== undefined) {
            		this.value(this.path() + (value ? '?' + value : ''));
            		return this;
            	}
                var value = this.value(),
                	index = value.indexOf('?');
                if (index != -1 && index < value.length) 
                	return value.substr(index + 1);
            },
            parameter: function(name, value, append) {
            	if (value !== undefined) {
            		var names = this.parameterNames(),
            			params = [];
            		for (var i = 0; i < names.length; i++) {
            			var n = names[i],
            				v = this.parameter(n);
            			if (typeof v == 'string')
            				v = [v];
            			if (n == name)
            				v = (value === null || value == '') ? [] : 
            					(append ? v.concat([value]) : [value]);
        				for (var j = 0; j < v.length; j++)
                			params.push(n + '=' + v[j]);
            		}
            		if ($.inArray(name, names) == -1)
            			params.push(name + '=' + value);
            		this.queryString(params.join('&'));
            		return this;
            	}
                var value = this.value(),
                	index = value.indexOf('?');
                if (index != -1) {
                    value = value.substr(index + 1);
                    var params = value.split('&'),
                    	r = [];
                    for (var i = 0; i < params.length; i++) {
                        var p = params[i].split('=');
                        if (p[0] == name)
                            r.push(p[1]);
                    }
                    if (r.length != 0)
                    	return r.length != 1 ? r : r[0];
                }
            },
            pathNames: function() {
                var path = this.path(),
                	names = path.split('/');
                if (path.substr(0, 1) == '/' || path.length == 0)
                    names.splice(0, 1);
                if (path.substr(path.length - 1, 1) == '/')
                    names.splice(names.length - 1, 1);
                return names;
            },
            parameterNames: function() {
                var value = this.value(),
	            	index = value.indexOf('?'),
                	names = [];
                if (index != -1) {
                    value = value.substr(index + 1);
                    if (value != '' && value.indexOf('=') != -1) {
                        var params = value.split('&');
                        for (var i = 0; i < params.length; i++) {
                        	var name = params[i].split('=')[0];
                        	if ($.inArray(name, names) == -1)
                        		names.push(name);
                        }
                    }
                }
                return names;
            }
        };
        
    })();
    
    $.fn.address = function (fn) {
        $(this).live('click', function() {
            var value = fn ? fn.call(this) : 
                /address:/.test($(this).attr('rel')) ? $(this).attr('rel').split('address:')[1].split(' ')[0] : 
                $(this).attr('href').replace(/^#/, '');
            $.address.value(value);
            return false;
        });
    };
    
}(jQuery));
